【Linux】cron/crontabの読み・書き方・設定方法

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 ファイルを削除する。(全ての設定が削除される)
  1. 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

関連記事

【Linux超入門】システムの基礎とよく使うコマンドなど徹底解説
Linuxシステムの基礎とよく使うコマンドなどについて入門者向けに解説します。
【LinuC】試験対策と例題まとめ
LinuCの試験対策と例題(学習サイト)についてまとめました。
LPICの試験対策と例題まとめ
LPICの試験対策と例題(学習サイト)についてまとめました。

コメント