1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

定期的に行う作業を自動実行したい(crontab)

Posted at

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の利用」がある。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?