この記事では、実践で使えるcrontabの書き方・設定を説明しています。
結論から言うと、crontabなんて簡単に書けます。
だから、覚えることはとても少ないです。
何なら覚える必要すらありません。
実際、crontabを設定する機会なんて多くありません。
そのため、覚えていないエンジニアも結構いるほどです。
これは本当です。
本記事の内容
- crontabの書き方・設定方法
- 実際にcrontabに書く設定
それでは、上記に沿って解説していきます。
crontabの書き方・設定方法
まずは、具体例から確認しましょう。
これは、実際のcrontabから抽出してきました。
05 1 * * * /root/backup.sh
上記は、毎日1時05分にLinux上でバックアップするためのスクリプトを起動させています。
では、次の書式を確認します。
crontabを記述する書式は以下。
# cron起動時間設定 * * * * * [実行コマンド] | | | | | | | | | |- 曜日 | | | |--- 月 | | |----- 日 | |------- 時 |--------- 分
実行コマンドと書いていますが、ここはファイルのパスだと覚えてください。
実際の運用では、ファイルに処理を書くことがほとんどです。
ここで言うファイルは、以下。
- シェルスクリプト
- プログラムファイル(PHP、Pythonなどなど)
各フィールドに設定可能な値は以下。
フィールド | 設定可能な数値 | 補足 |
分 | 0-59 | |
時 | 0-23 | |
日 | 1-31 | |
月 | 1-12 | |
曜日 | 0-7 | 0=日、1=月、2=火、3=水、4=木、5=金、6=土、7=日 |
なお、「*」(アスタリスク)は各フィールドで設定可能な全ての値を表しています。
例えば、冒頭で挙げた設定を確認しましょう。
05 1 * * * /root/backup.sh
日、月、曜日が「*」です。
すべての日、すべての月、すべての曜日の1時05分を設定しています。
つまり、毎日1時05分ということです。
とりあえず、ここまでの内容を覚えればOKです。
これだけでもうcronの設定ができるようになります。
この知識をベースにして、実際にcrontabに書く設定を確認していきましょう。
実際にcrontabに書く設定
たくさん説明しても覚えられません。
そもそも、覚える必要なんてありません。
この記事では、以下の3パターンだけ覚えて帰ってください。
- 1日1回
- 間隔を設ける
- 禁止時間帯
以下で説明していきます。
1日1回
05 1 * * * /root/backup.sh
バックアップは、基本的には1日1回です。
その場合の書き方となります。
バックアップ以外では、不要ファイル削除なども1日1回が多いですね。
この書き方さえ知っていれば、とりあえずバッチ処理を実現できます。
crontabにおける設定の、50%以上は1日1回指定ではないでしょうか?
私の場合は、8割ほどがこの書き方となります。
間隔を設ける
*/5 * * * * /root/check.sh
5分に1回、check.shが起動します。
常時監視する場合には、この書き方になります。
この書き方も多いです。
「*/数値」という表現により、間隔を設定できます。
もちろん、分以外にも指定可能です。
0 */3 * * * /root/check.sh
上記の場合なら、3時間毎に1回起動します。
「1日1回」と「間隔を設ける」だけで、ほぼ9割ぐらいではないでしょうか?
禁止時間帯
* 0-3,6-23 * * * * /root/access.sh
毎日0時から3時と6時から23時は、access.shを起動させます。
これは、逆に言えば以下。
「夜中4時から6時までは、access.shは起動させない(禁止)」
このcrontabの書き方は、どのような場合に必要となるのか?
メンテナンス時間を避ける場合などですね。
何気に「-」と「,」が出てきました。
「-」は範囲指定です。
「,」はorだと覚えてください。
「,」だけで上記を表現してみましょう。
* 0,1,2,3,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * * /root/access.sh
極端な話「-」は覚えなくても大丈夫です。
でも、こんなに書くの嫌ですよね。
嫌な場合は、「-」もついでに覚えましょう。
ただ、個人的には「,」と「-」はそんなに使いません。
大抵は、「1日1回」と「間隔を設ける」でカバーできます。
面倒なら、「禁止時間帯」(「,」と「-」による複数指定も含む)は覚えなくてもいいです。
頭の片隅に入れておくだけでも、十分です。
本当に必要な場合に、Googleで検索すれば問題ありません。