アプリケーション ログをローテーションするために、「logrotate.d」ディレクトリに 2 つのスクリプトを追加しました。これはそのうちの 1 つの構成です。
<myLogFilePath> {
compress
copytruncate
delaycompress
dateext
missingok
notifempty
daily
rotate 30
}
「cron.daily」ディレクトリに「logrotate」スクリプトがあります (cron ログによると、毎日実行されているようです)。
#!/bin/sh
echo "logrotate_test" >>/tmp/logrotate_test
#/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
/usr/sbin/logrotate -v /etc/logrotate.conf &>>/root/logrotate_error
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
最初の echo ステートメントは機能しています。
しかし、httpd などの他のログがローテーションされているのに対し、アプリケーション ログだけではローテーションされていないことがわかりました **
**また、前述の「logrotate_error」ファイルに出力が表示されません(すべてのユーザーに書き込み権限があります)。
ただし、syslog には次のように記載されています。 「logrotate: ALERT が [1] で異常終了しました」
しかし、「cron.daily」スクリプトで同じ「logrotate」を手動で実行すると、すべて正常に動作しているように見えます。
毎日のcronスケジュール中にローテーションしないのはなぜですか? ここで何か間違ったことをしていますか?
こんなに必要な助けが得られたら素晴らしいことです。
更新: selinux が原因のようです。ユーザーのホーム ディレクトリのログ ファイルには、selinux によって課された制限と、logrotate スクリプトが実行されたときの制限があります。
SELinux is preventing /usr/sbin/logrotate from getattr access on the file /home/user/logs/application.log