この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
目次
cron の設定方法
CentOS や Ubuntu、Amazon linux など Linux 環境にて定期処理を行いたいときは crontab コマンドを使用して cron を設定します。
crontab コマンドは単純ですが、cron 設定には色々な書式があるため書き方が豊富です。思わぬ動作をする事も多く、頭を抱えて悩むこともしばしば。そこで今回は crontab コマンドと cron の設定方法に関する情報をまとめていきます。
crontab コマンドの書式
オプションの説明
crontab オプションのうち、LinuxOS 共通で使用できるオプションは4つあります。
オプション | 説明 |
---|---|
-u オプション | どのユーザの crontab を設定するかを指定します。省略したときは、crontab コマンドを実行したユーザーの crontab を対象とします。 |
-e オプション | 対象となるユーザーの crontab の設定ファイルを編集モードを開きます。 |
-l オプション | 現在設定されている crontab ファイルの設定情報を標準出力として表示します。 |
-r オプション | 対象となるユーザーの crontab の設定ファイルを削除します。 |
crontab の OS ごとの違い
crontab は全ての LinuxOS で同じ挙動をします。しかし OS ごとに追加オプションが用意されている場合があります。
ほぼ使わない且つ CentOS 限定とはなりますが、
・「-n」オプション クラスタ内のホスト名を設定する
・「-c」オプション クラスタ内のホスト名を取得する
・「-x」オプション デバックを有効にする
などが存在します。
下記は、CentOS7 と Ubuntu18.04 のヘルプ画面からオプション一覧を表示したものです。
CentOS7 における crontab のヘルプ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@hostname]# crontab -h Usage: crontab [options] file crontab [options] crontab -n [hostname] Options: -u <user> define user -e edit user's crontab -l list user's crontab -r delete user's crontab -i prompt before deleting -n <host> set host in cluster to run users' crontabs -c get host in cluster to run users' crontabs -s selinux context -x <mask> enable debugging |
Ubuntu18.04 における crontab のヘルプ
1 2 3 4 5 6 7 |
root@hostname:# crontab -h usage: crontab [-u user] file crontab [ -u user ] [ -i ] { -e | -l | -r } -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) |
crontab の設定方法
crontab の設定項目は、左から順番に「分」「時」「日」「月」「曜日」、そして「実行するコマンド」の順番に記述します。
項目名 | 指定可能な数値の範囲 |
---|---|
分 | 0-59 |
時 | 0-23 |
日 | 1-31 |
月 | 1-12 |
曜日 | 0-7(0と7は日曜日を表す) 0=日、1=月、2=火、3=水、4=木、5=金、6=土、7=日 |
固定の時刻を指定する
下記の設定方法を行うと、毎日の午前3時15分に実行されます。
複数の時刻を指定する
下記の設定方法を行うと、毎日の午前11時10分と午前11時20分に実行されます。
一定の間隔で指定する
下記の設定方法を行うと、5分間隔で実行されます。
時刻の範囲を指定する
下記の設定方法を行うと、午前5時45分、午前6時45分、午前7時45分のように範囲で指定することができます。
crontabの実行結果をメールで通知する
crontab の実行結果をメールで通知するには、「MAILTO」で送信先メールアドレスを指定することもできます。メールの送信先を複数指定したいときは、メールアドレスを「,」(カンマ) で区切って指定します。「MAILTO」のみを指定した場合、または「MAILTO=””」など空白を指定したときは、メールを送信しない設定になります。
なお「MAILTO」自体を記述しないときは、crontab の所有者宛に実行結果を通知します。
設定ファイルの設置場所(パス)
cron の設定ファイルは、ほとんどの Linux 環境で「/var/spool/cron/」より下の階層に設置されてます。crontab コマンドの「crontab -e」で、cron の設定ファイルを操作せずに直接、設定ファイルを編集することもできます。
CentOS の設定ファイルの設置場所
CentOS7 の設定ファイルを確認した際のサンプル
1 2 3 4 5 6 7 |
[root@hostname]# cd /var/spool/cron/ [root@hostname]# ls -la total 0 drwx------. 2 root root 32 Mar 2 19:26 . drwxr-xr-x. 7 root root 71 Jun 5 2018 .. -rw-------. 1 centos centos 0 Mar 2 19:26 centos -rw-------. 1 root root 0 Mar 2 19:26 root |
Ubuntu の設定ファイルの設置場所
Ubuntu18.04 の設定ファイルを確認した際のサンプル
1 2 3 4 5 6 7 |
root@hostname:# cd /var/spool/cron/crontabs/ root@hostname:# ls -la total 16 drwx-wx--T 2 root crontab 4096 Mar 2 19:25 . drwxr-xr-x 5 root root 4096 Sep 13 00:57 .. -rw------- 1 root crontab 1089 Mar 2 19:25 root -rw------- 1 ubuntu crontab 1089 Mar 2 19:25 ubuntu |
設定ファイルが反映されるタイミング
cron の設定は、設定ファイルの変更後に即座に反映されます。
cron は毎分設定ファイルの有無、及び設定ファイルの内容を確認してるため、即座かつ自動で反映される仕様になっています。
cron が反映されるタイミングの公式情報
Additionally, cron checks each minute to see if its spool
directory’s modtime (or the modtime on /etc/crontab) has
changed, and if it has, cron will then examine the modtime
on all crontabs and reload those which have changed. Thus
cron need not be restarted whenever a crontab file is mod-
ified. Note that the Crontab(1) command updates the mod-
time of the spool directory whenever it changes a crontab.
引用元URL:http://crontab.org/cron.8.html
さいごに
crontab コマンド / cron の設定方法をお伝えしましたが、いかがでしたでしょうか?
定期処理は、ウェブサービスを作成するためで必須となる設定です。仮にレンタルサーバーでも管理パネルから簡単に設定を行うこともできるため、ぜひ定期処理を活用して下さい。