periodic maintenance reportsをメールで受け取る方法についてメモ。
またメールに送り出すと、/var/log/daily.outといったローカルファイルには書き出されなくなる。それはそれで嫌だなーということで、ローカルファイルにも書き出しつつ、メールでも受信するようにした。
OS X Server特有のイケてないとこの回避策も合わせてメモする。
periodic maintenance とは
定期的に行うメンテナンスの仕組みで古くからある仕組み。毎日、毎週、毎月の3つのタスクが用意されている。統計情報をまとめてくれたり、/tmpの掃除をしたり、いろいろ便利だったりする。その結果は、/var/log/daily.outなどのファイルに書き出される
periodic の設定ファイル
periodic maintenanceの設定ファイルは、 /etc/defaults/periodic.conf です。この中に
periodic_conf_files="/etc/periodic.conf /etc/periodic.conf.local"
という行があります。これらのファイルの中の設定値が /etc/defaults/periodic.conf の設定を上書きするというわけです。これらのファイルは標準では存在しないので自分で作る必要があります。私は /etc/periodic.conf.local を作成しています。
/etc/periodic.conf.local の中でメール送信の宛先を記載する。
こんな感じで記述します。
# Mail Report settings
daily_output="dailyreport@osxserver.example.com"
weekly_output="weeklyreport@osxserver.example.com"
monthly_output="monthlyreport@osxserver.example.com"
osxserver.example.com はサーバ自体のことです。
OS X Serverでメールサービスを実行
サーバがローカルでメールを発信しそれを受信配送する必要がありますから、メールサービスを動かします。OS X ServerではONにするだけなので、細かい説明は抜きます。
dailyreport などの宛先は予めあるわけではないのでそれを用意します。 /etc/aliases ファイルにalias設定を追記します。
# Periodic Reports
dailyreport: /var/log/periodic.outs/daily.out, myaccount@icloud.com
weeklyreport: /var/log/periodic.outs/weekly.out, myaccount@icloud.com
monthlyreport: /var/log/periodic.outs/monthly.out, myaccount@icloud.com
これでnewaliases
コマンド発行後、ローカル配送されたメールが、ローカルの /var/log/periodic.outs/*.out に書き出されつつ、その後ろに書いたメールアドレスに外部配送されるようになります。
/var/log/periodic.outs/なわけ
標準では、/var/log/*.outに書き出されますが /var/log/periodic.outs/ にした事には理由があります。
メールサービス(postfixです)がファイルを書き出すときlockファイルを作るのですが、 /var/log はpostfixユーザにとってwritableではありません。と言って、このディレクトリに書き込み権を与えるのもちょと変です。そこでサブディレクトリを作成してそこに書き込ませるようにしました。また、ファイルのownerはnobodyですからowerをnobodyに設定しています。
$ ls -la /var/log/periodic.outs
total 3928
drwxrwxr-x 5 nobody _postfix 170 Oct 19 10:37 ./
drwxr-xr-x 123 root wheel 4182 Oct 19 10:36 ../
-rw-r--r-- 1 nobody _postfix 1624777 Oct 19 10:37 daily.out
-rw-r--r-- 1 nobody _postfix 176713 Oct 7 03:11 monthly.out
-rw-r--r-- 1 nobody _postfix 204568 Oct 15 01:13 weekly.out
$
互換性(?)を取るためにシンボリックリンクを張っておくのもいいかもしれません。
$ cd /var/log
$ ls -l *.out
lrwxr-xr-x 1 root wheel 32 Oct 19 10:35 daily.out@ -> /var/log/periodic.outs/daily.out
lrwxr-xr-x 1 root wheel 34 Oct 19 10:36 monthly.out@ -> /var/log/periodic.outs/monthly.out
lrwxr-xr-x 1 root wheel 33 Oct 19 10:36 weekly.out@ -> /var/log/periodic.outs/weekly.out
$
OS X Serverのちょっとイケてないとこ
OS X Serverのpostfixの設定ディレクトリは、標準的な /etc/postfix ではありませんが、このディレクトリとその中のファイルは存在しています。 実際使われているのは、 /Library/Server/Mail/Config/postfix です。なので、postfixの設定ファイルを見るコマンドpostconf
では -c スイッチを忘れずにつけないとハマります。そしてaliasesの設定を確認します。
$ postconf -c /Library/Server/Mail/Config/postfix 2> /dev/null | grep -e ^alias
alias_database = hash:/etc/aliases
alias_maps = hash:/Library/Server/Mail/Config/postfix/aliases
この状態でnewaliasesをするとaliasesのhash dbが /Library/Server/Mail/Config/postfix/aliases.db で更新されるのですが、実際配送するときには、 /etc/aliaes.db を見ているようです。 /var/log/mail.log には、
warning: database /etc/aliases.db is older than source file /etc/aliases
というエラーが出力されます。
そこで、シンボリックリンクを張ることでこの問題を回避することにしました。
$ ls -l /etc/aliases.db
lrwxr-xr-x 1 root wheel 46 Oct 19 09:25 /etc/aliases.db@ -> /Library/Server/Mail/Config/postfix/aliases.db
$