本文へスキップ
BecomeCoder

シェルスクリプトコース · 第8章 cron で定期実行 · レッスン35

時刻の書き方 ― 5つのフィールドを読む

ブラウザで完結

導入

0 3 * * * という並びは、慣れれば一目で「毎日3時」と読めます。逆に読めないと、他人が仕込んだ設定に触れません。ここは暗記ではなく、構造を理解すれば読めるようになります。

説明

5つのフィールドは、左から小さい単位 → 大きい単位の順です。

┌────── 分 (0-59)
│ ┌──── 時 (0-23)
│ │ ┌── 日 (1-31)
│ │ │ ┌ 月 (1-12)
│ │ │ │ ┌ 曜日 (0-7、0と7が日曜)
│ │ │ │ │
0 3 * * *  /home/user/scripts/backup.sh

* は「すべて」。つまり 0 3 * * * は「毎日・毎月・どの曜日でも、3時0分に」という意味になります。

各フィールドには4つの書き方があります。

書き方意味
数値30ちょうどその値
**すべて
*/n*/15n おき(0,15,30,45 分)
a-b9-18範囲(9時〜18時)
a,b,c1,15列挙(1日と15日)

よく使う例を読んでみましょう。

設定意味
*/5 * * * *5分おき
0 * * * *毎時0分(1時間おき)
0 3 * * *毎日3時
30 9 * * 1-5平日(月〜金)の9時30分
0 0 1 * *毎月1日の0時
0 9 * * 1毎週月曜の9時

「日」と「曜日」の両方を指定すると OR になる(どちらかに当てはまれば実行)という独特のルールがあるので、片方は * にしておくのが無難です。

読み書きしやすくする書き方として、@daily(毎日0時)・@hourly(毎時0分)・@weekly@monthly@reboot(起動時)という特殊指定もあります。

#!/bin/bash
# 予定表を見ながら、5つのフィールドを読み解く

crontab -l

echo "---"
echo "0 3 * * *      → 毎日 3時0分"
echo "*/15 * * * *   → 15分おき"
echo "30 9 * * 1-5   → 平日の 9時30分"
echo "@daily         → 毎日 0時(0 0 * * * と同じ)"

やってみよう

下の端末で crontab -l を見ながら、0 3 * * **/15 * * * * がそれぞれ何を意味するか、上の表と照らし合わせてください。そのうえで cronsim 03:00 と打つと、3時になったことにして予定が実行されます。cronsim 03:15cronsim 04:00 も試して、どの予定が動くかを確かめましょう。

演習

cronsim 03:00 を実行して、0 3 * * * に登録されたバックアップが動くことを確かめてください。

ヒント1を見る

cronsim 時:分 で、その時刻になったことにできます。

ヒント2を見る

下の端末で cronsim 03:00

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。