crontab
(クローンタブ)コマンドは、cronjob
を管理するコマンドである。
cronjob
とは、crond
に実行してほしいコマンドとその実行日時のセットである。
crond
(クローンディー)とは、指定した日時にコマンドを自動実行するLinuxのサービスである。
設定されているcronjob
を表示するには、以下のコマンドを実行する。
$ sudo crontab -l
定期的に実行するjobの登録方法
crontab -e
を実行すると、環境変数「EDITOR」で設定されているエディタが開いてcronjobの設定を編集できる。
初期状態だと以下のような状態となっている。
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
登録したいjobは、
* * * * * 実行コマンド
のような書式で記載する。
*
(ワイルドカード)は、それぞれ「分」「時刻」「日付」「月」「曜日」に対応している。
分: 0-59で指定する。*
を指定すると、毎分の意味になる。
時刻: 0-23で指定する。*
を指定すると、毎時間の意味になる。
日付: 1-31で指定する。*
を指定すると、毎日の意味になる。
月: 1-12で指定する。*
を指定すると、毎月の意味になる。
曜日: 0-7で指定する。*
を指定すると、毎曜日の意味になる。(0=日、1=月、2=火、3=水、4=木、5=金、6=土、7=日)
時間の書き方の例
8-15
のように-
でつなぐと範囲指定できたり、*/10
のように/
を使うと何分おき、何時間おきに実行のような設定ができる。
43 23 * * * 23:43に実行
12 05 * * * 05:12に実行
0 17 * * * 17:00に実行
0 17 * * 1 毎週月曜の 17:00に実行
0,10 17 * * 0,2,3 毎週日,火,水曜の 17:00と 17:10に実行
0-10 17 1 * * 毎月 1日の 17:00から17:10まで 1分毎に実行
0 0 1,15 * 1 毎月 1日と 15日と 月曜日の 0:00に実行
42 4 1 * * 毎月 1日の 4:42分に実行
0 21 * * 1-6 月曜日から土曜まで 21:00に実行
0,10,20,30,40,50 * * * * 10分おきに実行
*/10 * * * * 10分おきに実行
* 1 * * * 1:00から 1:59まで 1分おきに実行
0 1 * * * 1:00に実行
0 */1 * * * 毎時 0分に 1時間おきに実行
0 * * * * 毎時 0分に 1時間おきに実行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02に実行
30 5 1,15 * * 1日と 15日の 5:30に実行
crontabの動作確認
crontab
で登録したjobが動作するかどうかを確認するには、定期実行しようとしているjobの動作時刻を、現在時刻から2分以上先に設定してみると良い。
MAILTOで実行結果をメールで受信
crontab -e
で起動したエディタに、MAILTO=メールアドレス
という行を書いておくと、それ以降のcronjobの出力内容がメールで送られるようになる。ただし、この機能を利用するには、別途MTAをセットアップする必要がある。
Windowsでcrontabに相当する機能は?
ここまで、Linuxのcrontab
を使って、定期的に実行したい処理を登録する方法について解説した。WindowsでもLinuxのcrontab
のように、定期的に実行したい処理を登録する機能として、「タスクスケジューラ」「PowerShellのNew-ScheduledTaskTrigger
の利用」「cmd.exeのschtasks
の利用」がある。