#よく忘れるのは私の頭のせいです。
crontab..よく忘れるw
忘れないのは構築で泣いたことばかりだ。。よし、わざとジョブを失敗させて怒られてみようか。
構築で移行させたり性能みたりとかで使う場面がありますね。毎回ネットみてその場しのぎです。
ならわかりやすくまとめておこうってことで、crontabの設定書式をおさらいしてますのん。
##crontab書式のまとめ
・各フィールドの間隔は半角スペース。
・記述書式は左から 「分 時 日 月 曜日 実行するコマンドとかスクリプトファイルパス」
・曜日は0からはじめても7で完結させてもいいですのん。
・スケジュールは毎回実施する場合は各フィールドにワイルドカード(*)を記述する。
・実行間隔を指定できる。(間隔値)
・不規則な複数の日付を指定できる。(共存)
##crontabを使うときのオプション
ようはcrontabを編集したり確認したりするお作法ね。編集する際にログインしたユーザだけ設定させたり動作させるとか。ここでやるんです。
運用するようになったらユーザー指定は必要ですね。さくっと実行したいなってときはユーザ指定はいらんのですが、root権限でしかやったことがないというw
crontab [ -u username ] { -l -r -e }
crontab -u amachan -e ←←←いち元さんなら特にユーザー指定しなくてもよろしおすぅ。
引数 | 説明 |
---|---|
-u | ユーザーを指定します。 |
-l | 現在のcrontab設定を表示させます。 |
-r | crontabの設定を削除する場合ね。昔/var/logをrmしてしまった私は、だれかに代行してもらうか、一回ゲロはいてからみんなのレビューのもと指差し確認しながら実施しています。 |
-e | crontabのスケジュールを編集します。これがメインです。削除も一行ずつ確認しながらできるのでこちらでやりましょう。おえっ; |
##crontabの記述方法
#コメント
分 時 日 月 曜日 実行コマンドやスクリプト
##各フィールドのスケジュールの指定「範囲」
以下のとおり範囲内の数値にて指定どおりスケジュール設定をします。
フィールド | 分 | 時 | 日 | 月 | 曜 |
---|---|---|---|---|---|
範囲 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7(日曜は0か7) |
特に指定が無い場合 | (*)は毎分 | (*)は毎時 | (*)は毎日 | (*)は毎月 | (*)は毎曜 |
##不規則なスケジュールの指定方法「共存」「間隔値」
説明 | 設定値例 | 各フィールドに設定した結果 | |
---|---|---|---|
共存 | 複数の決めた時間で実施したい場合に設定する | 1,5,6-9 | 時:1時5時6時7時8時9時に実施。日:1日5日6日7日8日9日、月:同じく。。 |
間隔値 | 決めた範囲の中で一定の間隔を設けて実施したい場合に指定する | 1-7/2 | 分:1分3分5分7分、時:1時3時5時7時、曜:月水金日 |
##設定例
以下は三国志13の戦法のようですが「机上空論」を発動しただけなので、ご自身で確認をば!
#30分ごとに実施したい
*/30 * * * * /usr/local/amachan.sh
#9時から21時の間で10分ごとに実施したい
*/10 9-21 * * * /usr/local/amachan.sh
#⇒9時10分、9時20分...(省略)...21時50分で終了かな..
#土曜と日曜の0時~7時までの2時間ごと12分に実施したい
12 0-7/2 * * 6,7 /usr/local/amachan.sh ←←曜日は(0,6)でもいい
#⇒土曜0時12分、2時12分、4時12分、6時12分、日曜もおなじ..かな..
#3/4と9/4の0時05分に実施したい
5 0 4 3,9 * /usr/local/amachan.sh
#⇒日付も別日とかできんのかな?そしたらもう一個定義とかなるんでしょうかね。
た、たぶんこれでいいはず;
##実際動かしてみた
まあ、実例があったほうがいいとおもって。。。やってみるといろいろあるんです。もちろん初期設定が出来てないときなんかは動かねーw なんのひねりもないスケジュールなんで不要なら飛ばしてください。
###こんなこともありました
どっかのパブリッククラウドレンタルしてCentOSを初期設定してなかったので、cronだから時間設定せねば!ってJST直したんですけど、直後はcrondのログとか整合が取れなくて動作しなかったです。予断ですが一回リブートしました。
リブートしたらログされていて、/var/log/cron でエスケープされていることがわかったので修正して成功しました。
⇒¥(実際には)入れないとここの記述例でいう%移行の記述内容は無視されますのん。
###ふつうに実施結果
# crontab -l
00 23 * * 4 /usr/sbin/chkrootkit >/home/chadmin/chkrootkit_`date +\%Y\%m\%d`
05 3 * * 5 /usr/sbin/chkrootkit >/home/chadmin/chkrootkit_`date +\%Y\%m\%d`
成功
# ls -al /home/chadmin/
total 24
drwxr-xr-x 2 root root 4096 Jan 16 03:05 .
drwxr-xr-x. 3 root root 4096 Jan 15 16:43 ..
-rw-r--r-- 1 root root 4699 Jan 15 23:00 chkrootkit_20150115
-rw-r--r-- 1 root root 4699 Jan 16 03:05 chkrootkit_20150116
はいできました。なんのまとめもありません。
それでは、サヨナラさよなら!