OpenBSDにlogrotate
はポートがなくnewsyslog
、膨大な数のログファイルの月次ローテーションに関する限り、機能が制限されているようです。
私はたくさんのドメインを持っています、のようなnginxログファイル名の膨大な数/var/www/logs/*/*.{access,error}.log
。
小さなシェルスクリプトとcronjobを考えています。それらをすべて毎月ローテーションし、前の月をファイル名に追加する最も簡単な方法は何でしょうか?
OpenBSDにlogrotate
はポートがなくnewsyslog
、膨大な数のログファイルの月次ローテーションに関する限り、機能が制限されているようです。
私はたくさんのドメインを持っています、のようなnginxログファイル名の膨大な数/var/www/logs/*/*.{access,error}.log
。
小さなシェルスクリプトとcronjobを考えています。それらをすべて毎月ローテーションし、前の月をファイル名に追加する最も簡単な方法は何でしょうか?
次のcrontabが機能するはずです。
0 0 1 * * /etc/nginx/logrotate.monthly.sh
/etc/nginx/logrotate.monthly.shには次のコンテンツが含まれている必要があります。
find /var/www/logs/ -name "*log" -exec \
mv -i {} {}.`sh -c 'date -r $(expr $(date +%s) - 1209600) +%Y-%m'` \; ; \
kill -USR1 `cat /var/run/nginx.pid`
toの-i
オプションmv
は、ファイルが上書きされないようにするために重要です。今日の日付を2週間前に戻すことで、ファイル名の日付を取得します(« tcsh:2週間前の日付をシェルに印刷»)。
このmisc@スレッドも確認してください。
(また、FAQに記載されている、privseped apacheに関する警告と、移動時の短い時間枠の必要性にも注意してください。)