質問
logrotate
同じ設定を実行し、カスタムログファイルを循環する複数の同じサーバーがあります。 1 つ以上のサーバーでマイログが正しく循環しません。
私はこの問題を解決するために数週間努力しましたが、成功しませんでした。ここに私がこれまでに取ったステップと、より詳細な情報を示します。どんな助けでも大変感謝します。
基本的に、この問題を解決するためのアイデアが不足しており、ここで何が間違っているかを確認するためのいくつかのアイデアが必要です。
私が試したこと
(構成ファイルは次のとおり)
logrotate
基本ファイルの構成と権限を確認してください。私はそこにすべてが大丈夫だと思います。- logrotate に必要な権限で宛先ディレクトリの権限を設定します
derp
(ディレクトリは誰にも書き込めません)。AFAIK)。 logrotate
次のコマンドを強制的に実行します。logrotate --force /etc/logrotate.d/derp
このコマンドはログを正しく循環しますが、翌日は実行されません。
手動で日付を過去の特定の時刻に変更し、次回の起動時にログが
/var/lib/logrotate/status
正しく実行されることを確認するか、次を使用します。logrotate
logrotate -vv /etc.logrotate.d/derp
これにより、ログは一度回転しますが、次回ログが回転するときは回転しません。成功した手動回転の結果は次のとおりです。
rotating pattern: /derp/*.log after 1 days (14 rotations) empty log files are not rotated, old logs are removed considering log /derp/access.log log needs rotating considering log /derp/php_errors.log log does not need rotating rotating log /derp/access.log, log->rotateCount is 14 dateext suffix '-20150814' ... files getting renamed and moved ... running prerotate script renaming /derp/access.log to /derp/access.log.1 creating new /derp/access.log mode = 0774 uid = 0 gid = 4 running postrotate script
人生は美しくないですか?唯一の問題は、翌日回転する必要があるとき(つまり、常にデータがあり、決して空ではない)、何も起こらないことです。
私はSEU問題を含む多くの問題についてコンサルティングを行ってきました。この問題これは、過去に他のlogrotate問題を処理するのに役立ちました。
構成
システムは最新のDebian 7を実行しています。ログファイルを生成するプロセスは root として実行されます。ログファイルを生成するプロセスはphp
アプリケーションであり、複数の子プロセスを生成します。
関連する構成は次のとおりです。derp
私のカスタムログファイルの場所は次のとおりです。
/etc/logrotate.d/derp
構成ファイル権限:
-rw-r--r-- 1 root root 265 Jul 9 2014 derp
/derp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 774 root adm
sharedscripts
postrotate
nohup /derp/daemonrestart.sh > /dev/null 2>&1
endscript
prerotate
killall -9 php > /dev/null 2>&1
endscript
}
prerotate
スクリプトはpostrotate
デフォルトでプロセス(ソケットサーバー)を起動または停止し、他のすべてのサーバーでうまく機能します。私はそこに問題がないと確信しています。
/var/lib/logrotate/status
(関連情報を表示するように編集)
logrotate state -- version 2
"/var/log/kern.log" 2015-7-20
...
"/derp/php_errors.log" 2015-8-11
...
"/derp/access.log" 2015-8-14
...
/derp/
ターゲットディレクトリの権限:
drwxr-xr-x 2 root root 4096 Jun 18 10:05 derp
関連ログは次の場所にあります\derp\
。
-rwxrwxr-- 1 root adm 3755558 Aug 14 07:57 access.log
答え1
あなたは次のように書きました:
次のコマンドを使用してlogrotateを強制します。
logrotate --force /etc/logrotate.d/derp
。このコマンドはログを正しく回転させますが、翌日は実行されません。
ここでの問題は、daily
属性が実際に「24時間」を意味することです。したがって、cron
ログファイルを手動で置き換えた後にエントリが24時間を超えない限り、その日以降はログファイルは置き換えられません。logrotate
/etc/cron.d/daily
私のDebianシステムでは、エントリは/etc/cron.daily
毎日06:25に実行されているため、通常の勤務日中に行われた手動ログの回転により、2日後にログの回転が発生しない可能性があります。
答え2
まあ、私はこの問題を修正する努力をあきらめました。クローネが救助に来ます。
sudo crontab -e
次に、スーパーユーザーのcrontabに次の行を追加します。
# Logrotate they said...
3 6 * * * /usr/sbin/logrotate -f /etc/logrotate.d/derp &> /dev/null
この-f
フラグは、ログロテートがログを回転させることを強制します。見つかったファイルは、/etc/logrotate.d/derp
私のアプリケーションに対応するlogrotate構成です。
不器用ですが、これがこのエラーを解決する唯一の方法です。