crontabを利用した定期的なログファイルの削除
後々使えそうなので備忘録も兼ねてまとめてみた。
応用すれば他のことにも使えそう。
crontabとは: crontabは定期的にジョブを実行するようスケジュールする cronを設定するコマンド。
実行するジョブによってログを記録したりそのログを定期的に削除 したりするのに使える。
九龍じゃない。多分。
使い方
crontab -e でcronの設定が可能
だいたいviエディタで編集画面が出るので、 わかりやすく最後尾にcron設定を記述しよう。
cron設定の記述法
例:0 9 * * 0 ./var/log/httpd/service/ LogDelete.sh
前5つの数字が実行時間で、後ろは実行したいジョブを記述する。
実行時間は前から順番に 分 時 日 月 曜日 を表す。時は24時間表記、曜日は0~6が日~ 土に対応している。
*の箇所は未指定を表す。
この例の場合は毎週日曜日の午前09:00に/var/log/ httpd/service/LogDelete. shを実行するcronとなる。
また、一定間隔でジョブを実行させるには日や時の場所に*/ XとするとXの間隔でジョブが実行される。
たとえば4時間ごとにジョブを実行したいなら以下のような記述に なる。
* */4 * * * ./var/log/httpd/service/ LogDelete.sh
設定しているcronは crontab -l で確認ができる。
cronを削除する場合は crontab -r で削除するか、crontab -eで編集して削除する。
-rの場合は全てのcronが削除されてしまうので注意。
一定期間より昔のログファイルを削除するシェルスクリプト
cron設定で実行するシェルスクリプト書いてた途中で引っかか った点があったのでおまけで書いとく。
シェルスクリプトLogDelete.shの中身はこちら
#!/bin/sh
# ログファイルのある場所へ移動
cd /var/log/httpd/service/
# 最終更新がX日前より昔で名前が’access_log.*’ のログファイルを削除
find ./ -name ‘access_log.*’ -mtime +X -exec rm -f {} \;
引っかかったのはmtimeの使い方
findのオプションで、最終更新が
-mtime +XならX日前~それ以前
-mtime -XならX日前~現在まで
のファイルにfind結果を絞り込む、 ってオプションなんですが、数え方がちょっとややこしくて
-mtimeを使用する場合は
現在時刻から、昨日の同時刻までの間を0日前
昨日の同時刻から一昨日の同時刻までを1日前とする。らしい。
例として今が1/9の午後3時なら
1/9の午後3時から1/8の午後3時が0日前、
1/8の午後3時から1/7の午後3時が1日前、
1/7の午後3時から1/6の午後3時が2日前、 という感じになる。
上の例でいくと
find ./ -name ‘access_log.*’ -mtime +1 -exec rm -f {} \;
このコマンドは「最終更新が1/7の午後3時(=1日前) より前」で「名前が’access_log.*’」 のファイルを削除する。
find ./ -name ‘access_log.*’ -mtime -2 -exec rm -f {} \;
このコマンドは「最終更新が1/6の午後3時(=2日前) から現在時刻の間」で「名前が’access_log.*’」 のファイルを削除する。
ということになる。
0日前って概念があるせいで分かりづらかった…。
参考: