Linuxのinfoアカウント
概要
info@hogehoge.local というようなメールアドレスは、
よくサイトのお問い合わせ窓口などに使われていると思う。
そういう通例にのっとって、
新しいサイトでも info@hogehoge.local というアカウントを作ったのですが、
サイトのお問い合わせフォームに問い合わせが入ると、
info@hogehoge.local に内容を送信する、という良くあるやつ。
メールが届かない
この時、WEBサーバにインストールしたpostfixのホスト名を、
良かれと思い hogehoge.local としました。
そしてLinuxは標準の状態で infoアカウントはエイリアスに記載されており、
postmasterへ配送されるように設定されています。
さらに、postmasterはrootへエイリアスされています。
そうすると
WEBお問い合わせフォームから、問い合わせを送る
→info@hogehoge.localへメールを送る
→WEBサーバ自身のinfoアカウントへローカル配送される*1
→info アカウントからエイリアスにエイリアスされて、rootアカウントへ配送される
→お問い合わせのメールが転送されてないじゃないか!と責められる
なので、こういった事態を避けるためには
- WEBサーバのSMTPホスト名を別名にする
fuga.hogehoge.localに変更しました。
/etc/aliases を編集
これでローカル配送されずに、
外部のメールサーバへ配送されるようになりました。
AWStatsの解析結果を静的HTMLで残す
AWStatsをRPMでインストールすると、付属ツールがインストールされる。
その中の一つに awstats.pl に直接渡すと引数だらけで面倒くさいHTML出力を、
仲介してくれる便利なツールがあった。
普通なら
/var/www/awstats/awstats.pl -config=fugahoge.com -output -staticlink > /var/www/awstatsreport/index.html
こういう叩き方をするのですが。
これだと出力されたHTMLはサマリーページのみで、
それぞれの詳しい項目、たとえば「不明なIPアドレス」といった項目にアクセスすると、
動的なページに遷移してしまい、静的HTMLを残している意味が無くなってしまう。
詳細な項目は -output= の引数に渡す事で それぞれの静的HTMLが出力出来るのですが、
全てのページを出力するという引数が無いらしい。
awstats_buildstaticpages.pl
そこで仲介してくれるツールを使うという事みたいだ。
perl /usr/bin/awstats_buildstaticpages.pl -config=fugahoge.com -lang=jp -dir=/usr/local/apache2/htdocs/awstats/html/201306 -month=06 -year=2013 -awstatsprog=/usr/local/apache2/htdocs/awstats/awstats.pl
引数の説明なんかは本家サイトに書いてあった。
なんで過去の結果を出力出来ないのか!と言いながらその手法を探していたのだけど、
ようやく見つかったのでメモしておく。
なんでかな
これなんであんまり書いてる人が居ないのかな。
AWStatsがもうそんなに使われてないって事なのかな。
そうなんだろうなー。
rsyncのエラー と sshdの設定
ssh経由のrsyncで同期する処理をcronで登録して、動作させていたのですが、
エラーが出ていて原因は何か調べていました。
rsyncのエラー
ssh_exchange_identification: Connection closed by remote host
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]
hosts.allowが原因?
調べてみると原因らしきものはいろいろとあって。
hosts.deny と hosts.allowによってsshdの通信相手を制限している場合、
許可されていないから、エラーが出ている。という場合があるそう。
これが原因かと思い、ネットワークアドレスで指定していた許可を、
IPアドレスに変更したりしたものの、エラーは出続けたので、
これが原因では無さそうという事になった。
sshdの設定が原因?
また他の対処方法を調べてみると、
sshdの起動プロセス数制限という設定が原因というのがあった。
確かに同期する場所を複数指定している処理なので、
同時に何個もプロセスが立ち上がるだろうと思い、
sshd_configのMaxStartups という設定を変更した。
最初は10になっていたが、エラーが出続けたため、
30に設定したらエラーが出なくなった。
これが原因か―、という事で備忘しておく。
この原因を特定するまで凄く時間がかかったのですが、
なんでかっていうとバッヂ処理で行っているコマンドを、
1個直接実行するだけだと、失敗しないしエラーも出ないからです…。
バッヂ処理してるスクリプトを実行するとエラーが出るっていう、
なんとも不思議な現象でしたが、理由が分かると納得ですね。