Skip to content

Instantly share code, notes, and snippets.

@kingtosh
Created April 4, 2021 18:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kingtosh/1c74dd42501710f7042bcf13b96a2655 to your computer and use it in GitHub Desktop.
Save kingtosh/1c74dd42501710f7042bcf13b96a2655 to your computer and use it in GitHub Desktop.
crontab 設定

crontabの書き方

crontabの書き方

  • 設定書式
  • 設定項目は左から「分」「時」「日」「月」「曜日」となっている。
* * * * * [実行コマンド]
  • 設定可能な数値
分 0-59
時 0-23
日 1-31
月 1-12
曜日 0-7 (0または7は日曜日)
  • 実行時間指定方法
リスト  	0,10,20,30  分フィールド指定した場合は0,10,20,30分に実行します。
範囲 	1-5         月フィールドで指定した場合、1,2,3,4,5月に処理を実行します。
共存 	1,6,9-11     時間フィールドで指定した場合、1時、6時、9時、10時、11時に処理を実行します。
間隔 	*/10       分フィールドで指定した場合、10分間隔で処理を実行します。「/」の後ろに指定した値の間隔で処理を実行します。
  • 毎時15分になると実行
15  *  *  *  *
  • 時間単位の設定例
  • 設定できる値 0-23
  • 毎日AM 4:02 に実行
02  4  *  *  *
  • 日にち単位の設定
  • 設定できる値 1-31
  • 毎月10日のAM 6:15 に実行
15  6  10  *  *
  • 月単位の設定
  • 設定できる値 1-12
  • 7月1日 AM 3:00に実行
00  3  1  7  *
  • 曜日単位の設定
  • 設定可能な値 0-7
  • 各値に対応する曜日
月曜日    1
火曜日    2
水曜日    3
木曜日    4
金曜日    5
土曜日    6
日曜日    7 または 0
  • 毎週月曜日のAM 10:00に実行
00  10  *  *  1
  • 間隔設定
  • 「/」の後に実行したい間隔の値を設定することで、その間隔で実行することができます。
  • 10分ごとに実行する場合
*/10  *  *  *  *
  • 3時間ごとに実行する場合
00  0-23/3  *  *  *
  • リスト設定
  • 「,」で区切ることで、複数の値を設定することが出来ます
  • 毎日AM 4:30とAM 9:30に実行
30  4,9  *  *  *
  • 毎週月、金曜日のAM 3:00に実行
00  3  *  *  1,5
  • 範囲設定
  • 「-」で指定することで、実行範囲を指定することができます。
  • 毎日AM 3:00 4:00 5:00 6:00 7:00 9:00 に実行
00  3-9  *  *  *
  • 毎月10日のAM 3:15 4:15 5:15 6:15 に実行
15  3-6  10  *  *
  • 複合
  • リストや範囲をあわせた記述も可能です。
  • AM 1:00 6:00 9:00 10:00 11:00に実行
00  1,6,9-11  *  *  *
  • 「crontab -e」コマンドでcronの設定を行います。
$ crontab -e
no crontab for tamo - using an empty one
crontab: installing new crontab
  • 毎時00分に「disk-space.sh」というスクリプトを実行させる設定です。
00 * * * * /root/disk-space.sh
  • 設定内容は/var/spool/cron/[user]に保存されますが、パーミッションの関係でrootユーザでしか中身は確認できないはずです。
# ls -l /var/spool/cron/
合計 8
-rw-------  1 root root 22  4月  2 11:39 root
-rw-------  1 root tamo 20  4月  2 12:53 tamo
crontabのTips
cronで月末を指定
  • 情報元cron(crontab)で月末で指定する方法
  • 毎月28~31日の間にtestコマンドで月末かどうかをチェックしているようです
55 23 28-31 * * /usr/bin/test $( date -d '+1 day' +%d ) -eq 1 && 実行したいコマンド
  • 最終金曜日のみ実行
  • cron的には毎週金曜日testコマンドで判別をしている、最終金曜日の判定はtestコマンドにて行っています。賢いですねぇ~
0 0 * * 5 /usr/bin/test $( date '+\%m' ) -ne $( date -v+7d '+\%m' ) && echo 'Go Ahead!'

dateコマンドの種類によっては下記のように設定する必要があるそうです。

0 0 * * 5 /usr/bin/test $( date +\%m ) -ne $( date --date '7 day' +\%m ) && echo 'Go Ahead!'
  • メールを出したくない場合
  • cron設定の前に以下の行を入力
MAILTO=””
  • これでメールは飛ばなくなります。逆に、複数のアドレスに飛ばしたいときは、カンマ区切りで複数メールアドレスを指定する

  • この$MAILTO変数は、デフォルトのメールアドレスを上書き

  • 特定の設定のみメールを変更

ただし、上記は/etc/crontab自体を変更した場合と同じく、実行するアカウントのcron設定すべての宛先に反映される。特定のスケジュールのみを宛先変更させたい場合には、次のように指定すればよい。

# crontab -e

0 2 * * * /bin/sh /etc/hogehoge 2>&1 | Mail [送信先メールアドレス]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment