お知らせメールのエラー

Maia MailGuardを利用して2週間が経ちました。
隔離されているメールに対してのお知らせメールが来ません。
cronとして設定しているので週一で来るはずのですが届きません。

37 11 * * 5 amavis /var/amavisd/maia/scripts/send-quarantine-reminders.pl >/dev/null 2>&1

試しにコンソールでコマンドを打ってみると以下のエラーが出ました。

2009-10-12 23:34:00 Maia: [send-quarantine-reminders] FATAL ERROR: Unable to read reminder.tpl

どうやらそのファイルが見えていないようです。
ファイル自体は以下の場所にあります。

/var/amavisd/maia/templates/reminder.tpl

パスが通っていないようなので.bashrcそのディレクトリをPATHへ追加しようと思ったのですが、cronを実行するユーザーのシェルをnolongに設定しているので見えないかもしれないと思いました。シェルに詳しくないので勘違いかもしれませんが。

という訳で当該スクリプトがその.tplファイルをどうやって取得しているかと調べると以下でした。


115 $select = "SELECT expiry_period, " .
116 "admin_email, " .
117 "reminder_login_url, " .
118 "reminder_template_file, " .
119 "smtp_server, " .
120 "smtp_port, " .
121 "reminder_threshold_count, " .
122 "reminder_threshold_size " .
123 "FROM maia_config WHERE id = 0";
124 $sth = $dbh->prepare($select)
125 or fatal(sprintf("Couldn't prepare query: %s", $dbh->errstr));
126 $sth->execute()
127 or fatal(sprintf("Couldn't execute query: %s", $dbh->errstr));
128 if (@row = $sth->fetchrow_array()) {
129 $expiry_period = $1 if $row[0] =~ /^([0-9]+)$/si; # untaint
130 $admin_email = $1 if $row[1] =~ /^(.+\@.+)$/si; # untaint
131 $reminder_login_url = $1 if $row[2] =~ /^(https?\:\/\/.+\..+)$/si; # untaint
132 $reminder_template_file = $1 if $row[3] =~ /^(.+)$/si; # untaint
133 $smtp_server = $1 if $row[4] =~ /^(.+)$/si; # untaint
134 $smtp_port = $1 if $row[5] =~ /^([1-9]+[0-9]*)$/si; # untaint
135 $reminder_threshold_count = $1 if $row[6] =~ /^([0-9]+)$/si; # untaint
136 $reminder_threshold_size = $1 if $row[7] =~ /^([0-9]+)$/si; # untaint
137 }
つまりSQLでファイルパスを取得しているようです。
SQLに記載されているテーブルmaia_configのカラムreminder_template_fileを見てみました。このテーブルはレコードが一つだけで当該カラムは確かにファイル名だけの記載でした。

というわけでテーブルmaia_configの中で.tplをパスが記載されているカラムreminder_template_fileとカラムnewuser_template_fileの値を以下のようなSQLを実行して絶対パスへ修正しました。

UPDATE `maia_config` SET
reminder_template_file='/var/amavisd/maia/templates/reminder.tpl'
, newuser_template_file='/var/amavisd/maia/templates/newuser.tpl'