配信できない電子メールのデータベース更新を含むmail.log(Ubuntu 20.04 LTSのpostfix 3.2.13)のいくつかの分析を実行したかったので、通常のlogrotateスクリプトmail.logから/ var / logを除外するスクリプトを作成します。しました。スクリプトを実行するために、回転後の部分に新しい/etc/lorotate.d/mail_logを作成しました。スクリプトが呼び出されましたが、dbファイルを生成できません。
postfix/postmap[540039]: fatal: open /etc/postfix/bad_recipients.db: Read-only file system
これが実際に権限の問題である可能性があると考えて、syslogユーザーのsudoersルールを追加し(/var/log/mailファイルはsyslogユーザーが所有する)、logrotateスクリプトを修正しました。
/var/log/mail.log
{
rotate 30
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
sudo /usr/local/sbin/mailfail.sh
endscript
}
ただし、すべてのmail.log()の上部に同じエラーが報告され、Read-only file system
データベースは更新されません。
スクリプトが実行中であることは、スクリプトに対するchrootまたは権限、またはsudoの誤った設定の問題ではないことを示します。記録されている他のファイルには、syslogユーザー(ログファイルを所有するユーザー)の権限があります。
Rsyslogdは、衣類プロファイルが適用されるチェーン内で唯一の実行可能ファイルであるようです。ただし、プロファイルに/etc/postfix*(rwk)パスを追加して強制から文句を言ってもエラーには影響しません。
(コマンドでスクリプトを実行すると、期待どおりに機能します)
答え1
logrotate
これは、Postfixに対して有効なsystemdの保護機能が原因で発生する可能性があります。特に、ProtectSystem
/etc
、「full」または「strict」に設定すると読み取り専用になります。
編集したい項目をに移動する必要がありますvar
。または変更を避けることができない場合は、/etc
関連ユニットを上書きして「true」にsystemctl edit
変更してください。これは保護されますが、保護されません。ProtectSystem
/usr
/etc