[Linux] crontab コマンドの書き方と設定

crontab_setting_top

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

cron の設定方法

CentOS や Ubuntu、Amazon linux など Linux 環境にて定期処理を行いたいときは crontab コマンドを使用して cron を設定します。

crontab コマンドは単純ですが、cron 設定には色々な書式があるため書き方が豊富です。思わぬ動作をする事も多く、頭を抱えて悩むこともしばしば。そこで今回は crontab コマンドと cron の設定方法に関する情報をまとめていきます。

 

crontab コマンドの書式

crontab [ -u ユーザ名 ] [ -i ] { -e | -l | -r }

オプションの説明

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 のヘルプ

Ubuntu18.04 における 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分に実行されます。

15 3 * * * [実行するコマンド]

複数の時刻を指定する

下記の設定方法を行うと、毎日の午前11時10分と午前11時20分に実行されます。

10,20 11 * * * [実行するコマンド]

一定の間隔で指定する

下記の設定方法を行うと、5分間隔で実行されます。

*/5 * * * * [実行するコマンド]

時刻の範囲を指定する

下記の設定方法を行うと、午前5時45分、午前6時45分、午前7時45分のように範囲で指定することができます。

45 5-7 * * * [実行するコマンド]

 

crontabの実行結果をメールで通知する

MAILTO = [通知先メールアドレス]

crontab の実行結果をメールで通知するには、「MAILTO」で送信先メールアドレスを指定することもできます。メールの送信先を複数指定したいときは、メールアドレスを「,」(カンマ) で区切って指定します。「MAILTO」のみを指定した場合、または「MAILTO=””」など空白を指定したときは、メールを送信しない設定になります。

なお「MAILTO」自体を記述しないときは、crontab の所有者宛に実行結果を通知します。

 

設定ファイルの設置場所(パス)

cron の設定ファイルは、ほとんどの Linux 環境で「/var/spool/cron/」より下の階層に設置されてます。crontab コマンドの「crontab -e」で、cron の設定ファイルを操作せずに直接、設定ファイルを編集することもできます。

CentOS の設定ファイルの設置場所

/var/spool/cron/[ユーザー名]

CentOS7 の設定ファイルを確認した際のサンプル

 

Ubuntu の設定ファイルの設置場所

/var/spool/cron/crontabs/[ユーザー名]

Ubuntu18.04 の設定ファイルを確認した際のサンプル

 

設定ファイルが反映されるタイミング

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 の設定方法をお伝えしましたが、いかがでしたでしょうか?

定期処理は、ウェブサービスを作成するためで必須となる設定です。仮にレンタルサーバーでも管理パネルから簡単に設定を行うこともできるため、ぜひ定期処理を活用して下さい。