Linuxのcronの読み・書き方・設定方法についてまとめました。
cronの使い方
cron(クロン)は、定期的にジョブを実行する機能です。
cronは、「crondデーモン」と「crontab(実行内容および実行頻度を記述したテーブル)」で構成されます。
「crondデーモン」はシステム起動時にinitプロセスによって起動され、その後は定期的にcrontabをチェックし、何を実行するか判断します。
例えば
「3分間に1回、〇〇のプログラムを自動で実行する」
「毎日12時に、〇〇のプログラムを自動で実行する」
といったように、実行する頻度を細かく調整できます。
cronは、最も短い頻度で1分毎にジョブを実行できます。
cronジョブの設定ファイル「/etc/crontab」はrootユーザーのみ修正可能です。
また、このファイルには、以下のような行が記載されています:
# vi /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user command to be executed
最初の3 行は、タスクの実行環境を設定する変数を定義します。
項目 | 概要 |
---|---|
SHELL | ジョブの実行に使用するシェル環境(上記の例ではBash シェル) |
PATH | 実行可能なプログラムへのパス |
MAILTO | メールでcronジョブの出力を受信するユーザー名。定義されていない場合(MAILTO=)、メールは送信されません。 |
残りの行は、スケジュールされているジョブの設定が以下の書式で記載しています。
書式
minute hour day month day of week user command
【分 時 日 月 曜日 <実行コマンド>】となります。
項目 | 概要 |
---|---|
minute | 実行する分を0〜59までの任意の整数で指定 |
hour | 実行する時間を0〜23までの任意の整数で指定 |
day | 実行する日を1〜31までの任意の整数で指定 |
month | 実行する月を1〜12 までの任意の整数で指定 |
day of week | 実行する曜日を0〜7 までの任意の整数。(0と7は日曜日、1は月曜日、2は火曜日、3は水曜日、4は木曜日、5は金曜日、6は土曜日を指す) |
user | ジョブが実行されるアカウントのユーザー名を指定 |
command | 実行するコマンド |
- アスタリスク (/*)
- 全ての有効な値を指定できます。例えば、dayにアスタリスク (*) を指定すると、毎日実行されます。
- ハイフン (-)
- 整数の範囲を指定できます。例えば、1-3は整数 1、2、3を指します。
- カンマ (,)
- カンマ (,) で区切られた値は、一覧を指定します。例えば、「1, 3, 4」はそれら3つの値の整数を指します。
- スラッシュ (/)
- スラッシュ (/)でステップ値を指定できます。範囲の後に「/」を付けると、その範囲内で指定した整数の値をスキップできます。例えば、minuteで「0-59/5」 と指定すると、0〜59分の間で5分ごとに実行できます。
- ハッシュ記号 (#)
- コメント行。
crontabの使い方
root以外のユーザーは、crontabを使用してcronタスクを設定します。
ユーザーが定義したcrontab「/var/spool/cron/」ディレクトリに格納されます。
そして、cronta を作成したユーザー名で実行できます。crontabの使い方は以下のとおりです。
●以下のコマンドを実行します。
$ crontab -e
●「VISUAL」もしくは「EDITOR」環境変数で指定されているエディターでcrontabを編集します。
● crontabを変更して保存すると、「/var/spool/cron/username」に書き込まれます。
● 以下のコマンドでcrontabの内容を一覧表示できます。
$ crontab -l
「/etc/cron.d/」ディレクトリに「/etc/crontab」ファイルと同じ構文のファイルが格納されています。
ただし、このディレクトリ内でファイルの作成と変更ができるのはrootユーザーのみとなります。
crontab のファイル変更後、デーモンは再起動は不要です。
書式
crontab [オプション]
オプション | 概要 |
---|---|
-e | 環境変数 VISUAL もしくは EDITOR で指定されているエディターを使って、現在の crontab を編集するのに使われる。編集終了後、 変 更された crontab は自動的にインストールされる。 |
-u ユーザー | どのユーザがcrontabを設定するのかを指定します。省略した場合はcrontabコマンドを実行したユーザで設定されます。 |
-l | 現在の crontab の内容を標準出力へ表示させる。 |
-r | 現在の crontab ファイルを削除する。(全ての設定が削除される) |
- cron サービスの起動と停止
cronサービスが実行中かどうかは、「/sbin/service crond status」コマンドで確認できます。
起動するには、「/sbin/service crond start」コマンドを使用します。
停止するには、「/sbin/service crond stop」コマンドを使用します。
サービスはブート時に起動するのが一般的です。
使用例
以下のコマンドでcrontabを起動します.
$ crontab -e
tmpフォルダ以下に「/tmp/crontab.〇〇」というファイルが出現するので、テキストエディタを開き、定期実行したい時間とそのスクリプトを書き込み設定を行います。
crontabの記載例
9時~11時の0分,30分にhome/pi/script_a.pyを実行する場合
00,30 9-11 * * * python3 home/pi/script_a.py
終日,10分毎にhome/pi/script_a.pyを実行する場合
*/10 * * * * python3 home/pi/script_a.py
起動時に毎回実行する場合
@reboot python3 home/pi/script_a.py
● 登録されているcronを確認
$ crontab -l
コメント