syokunin のすべての投稿

mysqldump 文字化け

mysqldumpはデフォルトでUTF-8で出力するらしい。
違う文字コードで格納していたので?文字化けする。
my.cnfのmysqldumpの項
[mysqldump]
default-character-set=binary
とすることで、格納された文字コードで出力される。

UTF-8 TeraTerm Pro with TTSSH2 自動ログイン

■マクロファイル作成
(マクロ言語補足)
connect: 接続
strconcat: 変数に文字列付けたし
wait: Hostからの受信待ち
sendln: Clientから送信

(以下記述例)
;各種値設定
Host = ‘host_name’
User1 = ‘user_name’
Password1 = ‘password’
Ini = ‘TERATERM.INI’
Prompt1 = ‘$’
PromptPW = ‘Password:’
Df = ‘df’

;接続コマンド作成
;Iniはなくてもよい。
;Hostごとにマクロを複数作るときなど
;マクロごとに背景の違うTERATERM.INIを指定するといいかも
;/1のところはssh2が使えれば/2とするべき
Cmd = ”
strconcat Cmd Host
strconcat Cmd ‘ /ssh /1 /auth=password’
strconcat Cmd ‘ /user=’
strconcat Cmd User1
strconcat Cmd ‘ /passwd=’
strconcat Cmd Password1
strconcat Cmd ‘ /f=’
strconcat Cmd Ini
;接続
connect Cmd

;対話的処理スタート(dfコマンド発行)
wait Prompt1
sendln Df

※このマクロファイルをttpmacro.exeと同じフォルダにfilename.ttlなどとして保存する。

■マクロショートカットへ関連付け
ttpmacro.exeのショートカットをどこかに作る
プロパティのリンク先に
引数としてマクロファイル名を記述
(記述例)
“C:\Program Files\teraterm\ttpmacro.exe” “filename.ttl”

公開鍵認証の場合はこちら

手順をムービーにしてみた。

UTF-8 TeraTerm Pro with TTSSH2 マクロファイル作成ムービー

POP/SMTPコマンド

■POP

USER:ユーザ名
PASS:パスワード
LIST:一覧
RETR メッセージ番号:受信
DELE メッセージ番号:削除
QUIT:終了

■SMTP

HELO クライアント名:クライアントをメールサーバに認識させる
MAIL FROM 送信元メールアドレス:From設定
RCPT TO 送信先メールアドレス:To設定
DATA 本文:メールヘッダ(Subject: From:など)・本文設定。”.”で本文終了。
QUIT:終了

ログローテーション設定

ここではApacheのバーチャルホストごとのアクセスログを記録・ローテーションの設定を行う。

■バーチャルホストごとにアクセスログを残す
httpd.confの該当のバーチャルホストのVirtualHostディレクティブに以下を記述。
[code]CustomLog /var/log/httpd/[LogFileName] combined[/code]

■ログローテーションの設定
/etc/logrotate.d/配下に各サーバごとの設定ファイルがある。
/var/log/httpd/[LogFileName]をローテーションするよう
[code]/etc/logrotate.d/httpd[/code]
に以下を追記
[code]
/var/log/httpd/[LogFileName] {
missingok
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2</dev/null` 2< /dev/null || true
endscript
}[/code]

※viなどで編集した際は編集後、チルダ付のバックアップファイルが生成される場合があり、そのファイルが残っているとエラーになるので存在すれば削除する。

■Cronの確認
[code]/etc/crontab[/code]

[code]02 4 * * * root run-parts /etc/cron.daily[/code]
といったような記述があり、
/etc/cron.daily/logrotateが存在することを確認。

以上で終了。

================================================================

■ログローテーション全体の設定

全体の設定ファイルは
[code]/etc/logrotate.conf[/code]

デフォルトでは
[code]
1:weekly
2:rotate 4
3:create
4:include /etc/logrotate.d
5:/var/log/wtmp {
6: monthly
7: create 0664 root utmp
8: rotate 1
9:}
[/code]
となっていました。
※コメント行は省略

1)毎週ローテーションする。(monthly,weekly,daily)
2)ローテーションファイルを4つ残す。
3)ローテーション後に同名のログファイルを作成する。
4)サーバーごとの設定ファイルがあるディレクトリ。
5)/var/log/wtmp (ユーザがログインした履歴)の設定。
6)毎月ローテーションする。
7)ローテーション後に同名のログファイルを作成。(パーミッション0664、所有者root、グループutmp)
8)ローテーションファイルを1つ残す。

■ローテーションのテスト

/etc/cron.daily/logrotateに記述されているコマンドを実行する。
[code]/usr/sbin/logrotate /etc/logrotate.conf[/code]

※/var/lib/logrotate.statusについて
ログローテーション実行後
[code]/var/lib/logrotate.status[/code]
に実行したファイル名と日時が記録されている。

例えば毎週ローテーションに設定していて、
/var/lib/logrotate.statusにテストしたいファイル(サーバー)が記述されていて
かつ、テスト時から見て過去1週間内の日付が記述されていればローテーションは実行されない。
その場合は目的のファイルの日時を過去1週間以上前の日付にしてテストする。

Postgresqlバックアップ&リストア

■基本
バックアップ
pg_dump [DbName] > [BackUpFileName]

リストア
psql -e -f [BackUpFileName] [RestoreDbName]

■ラージオブジェクトを含む場合
バックアップ
pg_dump -b -F c [DbName] > [BackUpFileName]

リストア
pg_restore -d [RestoreDbName] [BackUpFileName]

※備考
DBへのアクセス権の問題でpostgresしか許可されていない、かつ、シェルスクリプトからバックアップを実行したい場合、postgresでシェルスクリプト(Bash)を実行します。しかし、その場合環境変数BASH_ENVのファイルを読みにいく。BASH_ENVに格納されているファイルはおおむねpostgres以外所有のファイルでエラーになるので以下の様に実行する。

su – postgres -c [bashスクリプト]

(スクリプトの中身)
#!/bin/bash
pg_dump -b -F c [DbName] > [BackUpFileName]

Smartyの利用

http://smarty.php.net/ より適当なディレクトリにSmarty-*.*.*.tar.gzをダウンロード

tar zxvf Smarty-*.*.*.tar.gz

■展開後でてくるlibs/内にはコアとなる Smarty.class.php や Smartyライブラリ が収められているのでlibs/内を任意のディレクトリにコピーする。

■コンテンツを公開するディレクトリに以下のディレクトリを作成する。

templates/ — 作成したテンプレートを格納
templates_c/ — コンパイルされたファイルが格納される
configs/ — 各種設定ファイル作成した場合、そのファイルを格納
cache/ — キャッシュファイルが格納される

※templates_c/ と cache/ にはApacheが書き込めるパーミッションを設定する。

■基本的な利用
$name を表示する。

【/path/to/templates/template.tpl】
<html>
<body>
{$name}
</body>
</html>

【[HomeDir]/public_html/index.php】
<php?
include_once(“/path/to/Smarty.class.php”);

$smarty = new Smarty(); //Smartyオブジェクト生成
$smarty->template_dir = “/path/to/templates”; // テンプレートディレクトリを指定
$smarty->compile_dir = “/path/to/templates_c”; // コンパイルディレクトリを指定

$var = “VarName”;
$smarty->assign(“name”,$var); // Smarty変数に値をアサイン(割り当て)する

$smarty->display(“template.tpl”); // template.tplを出力
?>

ブラウザで[HomeDir]/public_html/index.phpにアクセスして
$name(VarName)が表示されればOK

※Smarty.class.phpのインクルードパスはシステム、又はphp.iniなどで設定してもOK

■Smarty.class.php の拡張
繰り返しディレクトリパスの設定や同じ変数の設定を行わないようにするため、classを継承して一箇所で管理する。又、自前のプラグインを利用するための定義を行う。

□以下のファイルを作成し、任意のディレクトリに配置する。
【/path/to/MySmarty.php】
<?php
// Smartyライブラリを読み込む
include_once(“/path/to/Smarty.class.php”);

class MySmarty extends Smarty {

function MySmarty()
{
$this->template_dir = ‘/path/to/templates’;
$this->compile_dir = ‘/path/to/templates_c’;
$this->config_dir = ‘/path/to/configs’;
$this->cache_dir = ‘/path/to/cache’;
// plugins_dir は配列なので複数定義できる。
// 自前のプラグインを置くディレクトリを最初に指定
$this->plugins_dir = array(‘/path/to/my_plugins’,’plugins’);
// 親クラスのコントラクタを呼び出す
$this->Smarty();
}

}
?>

□/path/to/my_plugins ディレクトリを作成し以下のファイルを格納。
substr()と同じ働きをする修飾子を作成する。

【/path/to/my_plugins/modifier.substr.php】
※ファイル名は「modifier.修飾子.php」とする。(関数の場合はfunction.関数名.php)

<?php
function smarty_modifier_substr ($string, $start, $length = ‘dummy’)
{
if($length == ‘dummy’) return substr($string, $start);
return substr($string, $start, $length);
}
?>
※関数名は「smarty_modifier_修飾子」とする。

□[HomeDir]/public_html/index.phpを以下の様に修正

<?php
//呼び出すクラスを拡張したクラスに変更
include_once(“/path/to/MySmarty.php”);

$smarty = new MySmarty();

$var = “VarName”;
$smarty->assign(“name”,$var);

$smarty->display(“template.tpl”);
?>

□/path/to/templates/template.tplを以下の様に修正

<html>
<body>
{$name|substr:0:3}
</body>
</html>

ブラウザで[HomeDir]/public_html/index.phpにアクセスして
$name(VarName)が3文字(Var)だけ表示されればOK