Cron ジョブは、定期的に実行する必要があるコマンドをスケジュールするために使用されます。これを使用すると、特定のコマンドまたはスクリプトを設定した時間内に定期的に実行するように構成できます。 cron は、Linux または Unix 系システムで最も便利なツールの 1 つです。 cron サービス (デーモン) はシステムのバックグラウンドで実行され、/etc/crontab ファイルと /etc/cron.*/ ディレクトリを継続的にチェックします。 /var/spool/cron/ ディレクトリもチェックします。
crontabコマンド
crontabは、スケジュールされたタスクをインストール、アンインストール、または一覧表示するために使用されるコマンドです。 cron 設定ファイルは、Vixie Cron の cron(8) デーモンを駆動するために使用されます。各ユーザーは独自の crontab ファイルを持つことができますが、これらのファイルは /var/spool/cron/crontabs ディレクトリにありますが、直接編集できるわけではありません。 crontab コマンドを使用して、独自のスケジュールされたタスクを編集または構成する必要があります。
スケジュール設定ファイルの種類
設定ファイルは、次のさまざまなタイプに分類されます:
UNIX または Linux のシステムレベルの crontab: このタイプは通常、システム サービスと、root または同様の権限を必要とする重要なタスクによって使用されます。 6 番目のフィールド (以下のフィールドの概要を参照) はユーザー名で、このコマンドを実行するユーザー ID を指定するために使用されます。このようにして、システムの crontab は任意のユーザーとして操作を実行できます。
ユーザーの crontab: ユーザーは crontab コマンドを使用して、独自のスケジュールされたタスクをインストールできます。 6 番目のフィールドは、実行する必要があるコマンドです。すべてのコマンドは、crontab タスクを作成したユーザーとして実行されます。
注: この Q&A Cron 実装は Paul Vixie によって書かれ、多くの Linux ディストリビューションおよび Unix 系システム (人気のある BSD の第 4 バージョンなど) に含まれています。その構文は、さまざまな crond 実装と互換性があります。
では、独自のスケジュールされたタスクをインストール、作成、編集するにはどうすればよいでしょうか?
crontab ファイルを編集するには、Linux または Unix シェル プロンプトで次のコマンドを入力する必要があります:
$ crontab -e
crontab 構文 (フィールドの紹介)
構文は次のとおりです:
1 2 3 4 5 /path/to/command arg1 arg2
or
1 2 3 4 5 /root/ntp_sync.sh
その内:
最初のフィールド: 分 (0-59)
2 番目のフィールド:時間 (0-23)
3 番目のフィールド: 日付 (0-31)
4 番目のフィールド: 月 (0-12 [12 は 12 月を表す])
5 番目のフィールド: 曜日 (0-7 [ 7 または 0 は日曜日を表します])
/path/to/command – 実行する予定のスクリプトまたはコマンドの名前
覚えやすい形式:
* * * * * 実行するコマンド
--- - ------------| 月 (1 ~ 12)| 1 月の日 (1 ~ 31)| ---- 時間 (0 - 23)
------------ 分 (0 - 59)
単純な crontab の例:
### 5 分ごとにbackupscript スクリプトを実行します ##* /5 * * * * /root /backupscript.sh### 毎日午前 1 時にバックアップスクリプト スクリプトを実行します ##0 1 * * * /root/backupscript.sh### 毎日午前 3 時 15 分にバックアップスクリプト スクリプトを実行します毎月最初の朝 ##15 3 1 * * /root/backupscript.sh
演算子の使用方法
演算子を使用すると、フィールドに複数の値を指定できます:
3 つの演算子が使用できます。スター (*): この演算子は、使用可能なすべての値を指定するフィールドです。たとえば、時間フィールドではアスタリスクが各時間に対応し、月フィールドではアスタリスクが各月に対応します。
コンマ (,) : この演算子は複数の値を含むリストを指定します (例: 1,5,10,15,20,25)。
ハッシュ (-) : この演算子は値の範囲を指定します (例: 5)。 -15 は、カンマ演算子を使用して 5,6,7,8,9,…,13,14,15 と入力するのと同じです。
区切り文字 (/): この演算子はステップ値を指定します。例: 0-23/ を時間フィールドで使用して、特定のコマンドを 1 時間ごとに実行することを指定できます。ステップ値の後にアスタリスク演算子を続けることもできます。コマンド ラインを 2 時間ごとに実行する場合は、*/2 を使用します。
メール出力を無効にする方法
デフォルトでは、コマンドまたはスクリプト (存在する場合) の出力はローカルの電子メール アカウントに送信されます。 crontab によって送信された電子メールの受信を停止したい場合は、実行したコマンドの末尾に >/dev/null 2>&1 を追加する必要があります。例:
0 3 * * * /root/backup.sh > /dev/ null 2>&1
出力コンテンツを vivek@nixcraft.in などの特定の電子メール アカウントに送信する場合は、次のように MAILTO 変数を定義する必要があります:
MAILTO="vivek@ nixcraft.in. in"0 3 * * * /root/backup.sh >/dev/null 2>&1
詳細については、「Crontab コマンドの電子メール ヒントを無効にする」を参照してください。
タスク: スケジュールされたタスクをすべてリストします
次のコマンドを入力します:
# crontab -l# crontab -u username -l
スケジュールされたタスクをすべて削除するには、次のコマンドを使用できます:
###現在のスケジュールされたタスクを削除します crontab -r
### 特定のユーザー名でスケジュールされたタスクを削除するには、このコマンドを root ユーザーとして実行する必要があります crontab -r -u username
時間を節約するために特別な文字列を使用してください
以下を使用します。8 つの特殊文字列のいずれかで最初の 5 つのフィールドが置き換えられ、時間を節約し、読みやすさを向上させます。
例:
ntpdate コマンドを 1 時間ごとに実行します
@hourly /path/to/ntpdate
/etc/crontab ファイルと /etc/cron.d/* ディレクトリの詳細
/etc/ crontab はシステムの crontab ファイルです。通常、システムレベルのタスクを構成するために root ユーザーまたはデーモンによってのみ使用されます。各ユーザーは、上で説明したように crontab コマンドを使用して、独自のタスクをインストールおよび編集する必要があります。 /var/spool/cron/ または /var/cron/tabs/ ディレクトリには、個々のユーザーの crontab ファイルが保存されます。このファイルはユーザーのホーム ディレクトリにバックアップする必要があります。
デフォルトの /etc/crontab ファイルを理解します
典型的な /etc/crontab ファイルの内容は次のとおりです:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/# run-parts01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
まず、環境変数を定義する必要があります。 SHELL 行が省略された場合、cron はデフォルトの sh シェルを使用します。 PATH 変数を省略した場合、デフォルトの検索パスは存在しないため、すべてのファイルは絶対パスを使用して検索する必要があります。 HOME 変数が省略された場合、cron は代わりに呼び出し元 (ユーザー) のホーム ディレクトリを使用します。
さらに、cron は /etc/cron.d/ ディレクトリ内のファイルを読み取ります。通常、sa-update や sysstat などのシステム デーモンは、スケジュールされたタスクをここに保存します。 root ユーザーまたはスーパー ユーザーは、次のディレクトリを使用して、スケジュールされたタスクを構成できます。ここにスクリプトを置くだけです。 run-parts コマンドは、/etc/crontab ファイルを通じて特定のディレクトリにあるスクリプトまたはプログラムを実行します。
スケジュールされたタスクをバックアップします
# crontab -l > /path/to/file# crontab -u user -l > /path/to/file