LoginSignup
37
52

More than 5 years have passed since last update.

【Linux】Crontab設定

Last updated at Posted at 2015-01-15

よく忘れるのは私の頭のせいです。

crontab..よく忘れるw
忘れないのは構築で泣いたことばかりだ。。よし、わざとジョブを失敗させて怒られてみようか。

構築で移行させたり性能みたりとかで使う場面がありますね。毎回ネットみてその場しのぎです。
ならわかりやすくまとめておこうってことで、crontabの設定書式をおさらいしてますのん。

crontab書式のまとめ


・各フィールドの間隔は半角スペース。
・記述書式は左から 「分 時 日 月 曜日 実行するコマンドとかスクリプトファイルパス」
・曜日は0からはじめても7で完結させてもいいですのん。
・スケジュールは毎回実施する場合は各フィールドにワイルドカード(*)を記述する。
・実行間隔を指定できる。(間隔値)
・不規則な複数の日付を指定できる。(共存)


crontabを使うときのオプション

ようはcrontabを編集したり確認したりするお作法ね。編集する際にログインしたユーザだけ設定させたり動作させるとか。ここでやるんです。
運用するようになったらユーザー指定は必要ですね。さくっと実行したいなってときはユーザ指定はいらんのですが、root権限でしかやったことがないというw

コマンド書式.ruby
crontab [ -u username ] { -l -r -e }
crontabをユーザー指定して編集.ruby
crontab -u amachan -e  ←←←いち元さんなら特にユーザー指定しなくてもよろしおすぅ。
引数 説明
-u ユーザーを指定します。
-l 現在のcrontab設定を表示させます。
-r crontabの設定を削除する場合ね。昔/var/logをrmしてしまった私は、だれかに代行してもらうか、一回ゲロはいてからみんなのレビューのもと指差し確認しながら実施しています。
-e crontabのスケジュールを編集します。これがメインです。削除も一行ずつ確認しながらできるのでこちらでやりましょう。おえっ;

crontabの記述方法

crontabの基本的な記述例.ruby
#コメント
    曜日 実行コマンドやスクリプト

各フィールドのスケジュールの指定「範囲」

以下のとおり範囲内の数値にて指定どおりスケジュール設定をします。

フィールド
範囲 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

はいできました。なんのまとめもありません。
それでは、サヨナラさよなら!

37
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
52