5分でわかるcrontabの使い方(コピペ例つき)

コマンドやスクリプトを数時間おきに実行させたい…そんな時に手動で実行していませんか?cronなら自動で定期的に実行してくれます。

Cronって何?

cron はクロンと読み、指定した時刻や間隔でコマンドやスクリプトを自動実行してくれる常駐プログラムです。

例えば「A というプログラムを 2 時間ごと に実行したい」とき、手作業で毎回実行するのはとても大変です。cron に一度スケジュールを登録しておけば、あとはサーバーやPCが稼働している限り、指定時間に自動実行されます。

設定はユーザーごとの「crontab」にジョブを書くだけ。次の章では基本の書き方とよく使う例を紹介します。

導入と使い方!

導入

ubuntu/debianで導入する方法をご紹介します。rootユーザーで実行してください

# (Debian/Ubuntu) cronを導入
sudo apt update
sudo apt install -y cron

# 起動&自動起動
sudo systemctl enable --now cron

# 状態確認
systemctl status cron

#設定画面起動
sudo crontab -e

基本の書き方

1行の構文(ユーザー crontab)

分 時 日 月 曜日 コマンド(絶対パス推奨)

許容値
・分:0–59
・時:0–23(24時間表記)
・日:1–31
・月:1–12 または jan–dec
・曜日:0–7 または sun–sat(0 と 7 は日曜)

演算子(よく使う4つ)
・* … すべて
・, … 列挙(例:1,15,30)
・- … 範囲(例:9-18)
・/ … ステップ(例:*/5 は5単位おき、2/4 は「2を起点に4刻み」)

特殊エントリ(これらを書くと指定した時のみに実行されます。)
・@reboot 起動時に1回
・@hourly 毎時0分
・@daily 毎日0:00
・@weekly 毎週日曜0:00
・@monthly 毎月1日0:00
・@yearly 毎年1/1 0:00

注意点
・フィールドは空白区切り。コロン「:」は使わない。
・絶対パスで書く(例:/usr/bin/python3)
・ファイルの実行権限に注意する
・root のジョブは「sudo crontab -e」が安全(/etc/crontab は“ユーザー欄が増える”別書式)。

いざ体験

https://crontab.guru

いざ文章でみても難しいと思います。(習うより慣れろと言いますし…)

このサイトを利用すると、手軽にcron式を体験することができます。黄色枠の中の数字を変えてみてください。そうすると上の””で囲まれた中の文言が変わると思います。

英語ですが、わかりやすいのでいろいろ触ってみてください。

2時・6時・10時・14時・18時・22時の「5分」に実行
5 2/4 * * * /usr/local/bin/task.sh

5分おき(00,05,10,…)
*/5 * * * * /usr/local/bin/heartbeat.sh

平日(Mon–Fri)の9〜18時、0分・30分に実行
0,30 9-18 * * 1-5 /usr/local/bin/report.sh

毎日02:30にバックアップ
30 2 * * * /usr/local/bin/backup.sh

月・水・金の深夜0時に実行(曜日を列挙)
0 0 * * mon,wed,fri /usr/local/sbin/maintenance .sh

起動時に一度だけ実行
@reboot /usr/local/bin/warmup.sh

5分おきに実行するが、競合回避のため最大10分ランダム遅延
*/5 * * * * /bin/bash -lc ‘sleep $((RANDOM%600)); /usr/local/bin/batch.sh

まとめ

自動実行して業務を効率化しましょう!ちなみに筆者はバックアップ作業や、CPU氏擁立のログ取りに利用しています。
このcronの後継にあたるtimerというものも存在します。それはまた今度の記事でご紹介します。