GNU/Linux システムは、タスクをスケジューリングするためのいくつかのユーティリティをサポートしています。 cron ユーティリティは、最も広くサポートされています。一定の間隔でバックグラウンドで実行されるタスクをスケジュールできます。 cron ユーティリティは、実行するスクリプトまたはコマンドのリストと実行時刻を含むテーブル (crontab) を使用します。
ジョブのスケジューリング
通常のユーザーは、crontab コマンドを使用してジョブを管理できます。このコマンドは 4 つの異なる方法で呼び出すことができます:
コマンド | 機能 |
---|---|
crontab -l | 現在のユーザーのジョブを一覧表示 |
crontab -r | 現在のユーザーのすべてのジョブを削除します。 |
crontab -e | 現在のユーザーのジョブを編集します。 |
crontab [ファイル名] | すべてのジョブを削除し、[ファイル名] から読み取ったジョブに置き換えます。ファイルが指定されていない場合、stdin が使用されます。 |
crontab を編集および表示する方法
「crontab -e」でジョブを編集する場合 “、エディターが開始されます (デフォルトでは vi。EDITOR 環境変数が別のものに設定されていない限り)。編集中のファイルには、1 行に 1 つのジョブがあります。空行は許可され、コメントはハッシュ記号 (#) で行を開始します。
# crontab -e
オプションなしで「crontab -e」コマンドを実行すると、現在ログインしているユーザーの crontab がデフォルトで編集されます。別のユーザーの crontab を編集するには、crontab コマンドで -u オプションを使用できます。たとえば、ユーザー john の crontab を編集するには
# crontab -u john -e
同様に、現在のユーザーの crontab を表示するには、「crontab -l」を使用します。 」コマンド。
# crontab -l
特定のユーザーの crontab を一覧表示するには、次のコマンドを使用します。
# crontab -u john -l
Cron 構成ファイル
cron バックグラウンド プロセスはほとんどアイドル状態です。毎分 1 回起動し、/etc/crontab、/etc/cron.d、およびユーザーの cron テーブル ファイルをチェックして、実行する必要のあるジョブがあるかどうかを判断します。
次の表は、cron が使用するさまざまなファイルとディレクトリの目的をまとめたものです。これらのファイルとディレクトリに関する知識は、あらゆる問題のトラブルシューティングに役立ち、cron をより詳細に理解するのに役立ちます。
ファイル | 目的 |
---|---|
/etc/init.d/crond | システム起動時に cron デーモンを開始します。 |
/var/log/cron | cron プロセスに関連するシステム メッセージ。問題のトラブルシューティングに役立ちます。 |
/var/spool/cron/[ユーザー名] | ユーザー crontab ファイルは /var/spool/cron ディレクトリに保存されます。 |
/etc/cron.allow | cron テーブルを作成できるユーザーを指定します。 |
/etc/cron.deny | cron テーブルの作成を許可されていないユーザーを指定します。 |
/etc/crontab | /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly のディレクトリにあるスクリプトを実行するコマンドを含むシステム cron テーブル。 |
/etc/cron.d | 毎時、毎日、毎週、または毎月以外のスケジュールで実行する必要があるジョブの cron テーブルを含むディレクトリ。 |
/etc/cron.hourly | 1 時間ごとに実行するシステム スクリプトを含むディレクトリ。 |
/etc/cron.daily | 毎日実行するシステム スクリプトを含むディレクトリ。 |
/etc/cron.weekly | 毎週実行するシステム スクリプトを含むディレクトリ。 |
/etc/cron.monthly | 毎月実行するシステム スクリプトを含むディレクトリ。 |
Crontab の構文
個々のユーザーのジョブはディレクトリ /var/spool/cron に保存されます ユーザー名に一致するファイル内。これらのファイルは常にユーザー root に属します。 /var/spool/cron 内のファイルは直接編集されません。代わりに、crontab と呼ばれるプログラムを使用してそれらを操作します。次の図は、cron ジョブの構文を示しています。
ファイルの各行はジョブを定義します。 1 行に 6 つのフィールドがあります。最初の 5 つのフィールドは時間を定義し、最後のフィールドには実行するコマンドが含まれます。これは、任意のタイプのコマンドまたはシェル スクリプトにすることができます。最初の 5 つのフィールドの形式は次のとおりです:
フィールド | 範囲 |
---|---|
分 | 0-59 |
時間 | 0-23 |
日 | 1-31 |
月 | 0-12 |
平日 | 0-7 |
cron ジョブの例
1.毎年 2 月 2 日に仕事をスケジュールする
毎年 1 回、2 月の特定の日にバックアップ スクリプトを実行する必要があります。構文を以下に示します。
0 9 2 2 * /usr/local/bin/yearly_backup
2.毎日、5 分ごとに 1 時間ごとにジョブをスケジュールします
次のコマンドを使用して、毎日 5 分ごとにスクリプトを実行します。
5 * * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
3.毎日真夜中の 5 分後にジョブをスケジュールする
次のコマンドを使用して、毎日午前 0 時 5 分後に実行します:
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
4.毎月 1 日の特定の時間にジョブをスケジュールします
次のコマンドを使用して、午後 2 時 15 分に実行します。毎月 1 日:
15 14 1 * * * $HOME/bin/monthly
5.平日のみの特定の時間にジョブをスケジュールします (土日を除く)
次のコマンドを使用して、午後 10 時に実行します。平日:
0 22 * * 1-5 $HOME/bin/weekday.job >> $HOME/tmp/out 2>&1
6.単一の cron ジョブで複数のジョブをスケジュールする
以下に示すように、セミコロン (;) で区切られたジョブを使用して、1 つの cron ジョブで複数のジョブをスケジュールすることもできます。
0 12 * * * /var/tmp/script01.sh; /var/tmp/script02.sh
7.範囲を使用して開始時刻を指定する
ハイフンを使用して範囲を指定できます。 1 ~ 5 の値は、このフィールドが 1 ~ 5 の数字に対して有効であることを示します。数字の代わりに名前を使用する場合、範囲を指定することはできません。範囲指定の例を以下に示します。ジョブは、午後 3 時から 1 時間ごとに実行されるようにスケジュールされています。午後10時まで
* 3-10 * * * /var/tmp/script.sh
8.ステップ値を使用して開始時間を指定する
ステップ値は、範囲と組み合わせて使用できます。ステップ値を指定するには、範囲の後にスラッシュ (/) と数字を続けます。指定された数値はステップ値です。たとえば、次の例では、3 つおきの値 (この場合は 2、5、8、および 11) が一致する必要があることを指定しています。
* 0-12/3 * * * /var/tmp/script.sh
ステップ値は、アスタリスクと共に使用することもできます。値 */3 時間フィールドの は、3 時間ごとに一致します (0、3、6、9、12、15、18、および 21)。
9.リストを使用して開始時刻を指定する
リストも使用できます。リスト内の各項目はコンマで区切られています。次のように、範囲と組み合わせてリストを使用するのが一般的です:
1-15,31-45 * * * * /var/tmp/script.sh
この例は、1 から 15 までと 31 から 45 までのすべての数字 (この場合は分) に一致します。数字の代わりに名前を使用する場合、リストを指定することはできません。
10.毎月 1 日、10 日、22 日の午前 4 時 45 分にジョブをスケジュールします
以下に示すのは、月の特定の日の特定の時間にジョブを実行する例です。
45 4 1,10,22 * * /apps/bin/backup.sh
Crontab マクロ
crontab ファイルにマクロを追加できます。たとえば、次のコマンドを使用して、再起動するたびに「my_script」を再起動します:
@reboot /var/tmp/my_script
以下は、さらにいくつかのマクロの要約です:
エントリ | 説明 | 同等 |
---|---|---|
@reboot | 起動時に 1 回実行 | なし |
@weekly | 週に 1 回実行 | 0 0 * * 0 |
@daily | 1日1回実行 | 0 0 * * * |
@真夜中 | (@daily と同じ) | 0 0 * * * |
@hourly | 1 時間に 1 回実行 | 0 * * * * |
出力の処理
スクリプトは、デバッグ、ステータスの更新、またはエラーのログ記録のために、画面に何かを出力することがよくあります。ジョブが画面に出力するものはすべて、電子メールで現在のユーザーに送信されます。これは、crontab 内の MAILTO 変数でオーバーライドできます。
# crontab -l MAIL=john 0 2 * * * /apps/bin/backup.shLinux で Cron を使用してジョブをスケジュールする方法
Linux で Cron を使用してシステム ジョブを定義する
UNIX / Linux :crontab が cron.allow および cron.deny ファイルに基づいてアクセスを検証する方法
CentOS / RHEL :anacron の基本 (anacron とは何か、その構成方法)
CentOS / RHEL :初心者のための cron ガイド