目次:
- Crontabファイルとは
- Crontabの構文と演算子
- システム全体のCrontabファイル
- 定義済みマクロ
- Linux Crontabコマンド
- crontab変数
- crontabの制限
- cronジョブの例
- 結論
Cronは、指定された間隔でタスクを実行するスケジューリングデーモンです。 これらのタスクはcronジョブと呼ばれ、主にシステムのメンテナンスまたは管理を自動化するために使用されます。
たとえば、cronジョブを設定して、データベースやデータのバックアップ、最新のセキュリティパッチでのシステムの更新、ディスク領域の使用状況の確認、電子メールの送信などの反復タスクを自動化できます。 DrupalやMagentoなどの一部のアプリケーションでは、特定のタスクを実行するためにcronジョブが必要です。
cronジョブは、分、時間、曜日、月、曜日、またはこれらの任意の組み合わせで実行するようにスケジュールできます。
Crontabファイルとは
Crontab(cronテーブル)は、cronジョブのスケジュールを指定するテキストファイルです。 crontabファイルには2つのタイプがあります。 システム全体のcrontabファイルと個々のユーザーcrontabファイル。
ユーザーのcrontabファイルはユーザーの名前で保存され、その場所はオペレーティングシステムによって異なります。 CentOSなどのRed Hatベースのシステムでは、crontabファイルは
/var/spool/cron
ディレクトリに保存され、DebianおよびUbuntuファイルは
/var/spool/cron/crontabs
ディレクトリに保存されます。
ユーザーのcrontabファイルは手動で編集できますが、
crontab
コマンドを使用することをお勧めします。
/etc/crontab
および
/etc/cron.d
ディレクトリ内のファイルは、システム全体のcrontabファイルであり、システム管理者のみが編集できます。
ほとんどのLinuxディストリビューションでは、スクリプトを
/etc/cron.{hourly, daily, weekly, monthly}
ディレクトリ内に配置することもでき、スクリプトは
hour/day/week/month
ごとに実行されます。
Crontabの構文と演算子
ユーザーcrontabファイルの各行には、スペースで区切られた6つのフィールドがあり、実行するコマンドがそれに続きます。
* * * * * command(s) - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)
最初の5つのフィールドには、コンマで区切られた1つ以上の値またはハイフンで区切られた値の範囲を含めることができます。
-
*
-アスタリスク演算子は、任意の値または常に意味します。 [時間]フィールドにアスタリスク記号がある場合、タスクは1時間ごとに実行されます。,
-コンマ演算子を使用すると、繰り返しの値のリストを指定できます。 たとえば、[時間]フィールドに1, 3, 5
がある場合、タスクは午前1時、午前3時、および午前5時に実行されます。-
ハイフン演算子を使用すると、値の範囲を指定できます。 曜日フィールドに1-5
がある場合、タスクは毎週(月曜日から金曜日まで)実行されます。/
-スラッシュ演算子を使用すると、特定の間隔で繰り返される値を指定できます。 たとえば、[時間]フィールドに*/4
がある場合、アクションは4時間ごとに実行されることを意味します。0, 4, 8, 12, 16, 20
を指定するのと同じ0, 4, 8, 12, 16, 20
。 スラッシュ演算子の前のアスタリスクの代わりに、値の範囲を使用することもできます1, 11, 21
1-30/10
は1, 11, 21
と同じ意味1, 11, 21
。
システム全体のCrontabファイル
システム全体のcrontabファイルの構文は、ユーザーのcrontabとは若干異なります。 cronジョブを実行するユーザーを指定する追加の必須ユーザーフィールドが含まれています。
共通の間隔を指定するために使用されるいくつかの特別なCronスケジュールマクロがあります。 5列の日付指定の代わりにこのショートカットを使用できます。 crontabコマンドを使用すると、編集のためにcrontabファイルをインストールまたは開くことができます。 crontabコマンドを使用して、次のオプションを使用して、cronジョブを表示、追加、削除、または変更できます。 crontabコマンドは、
cronデーモンは、いくつかの環境変数を自動的に設定します。 システム管理者は、/
デフォルトでは、/
どちらのファイルも存在しない場合、管理者権限を持つユーザーのみが
以下は、さまざまな期間で実行するタスクをスケジュールする方法を示すcronジョブの例です。 月曜日から金曜日までの毎日15:00にコマンドを実行します。 5分ごとにスクリプトを実行し、標準出力を
毎週月曜日の午後3時に2つのコマンドを実行します(コマンド間に演算子
2分ごとにPHPスクリプトを実行し、出力をファイルに書き込みます。 毎日午前8時から午後4時まで、毎日1時間ごとにスクリプトを実行します。 毎月第1月曜日の午前7時にスクリプトを実行します 毎月1日と15日の午後9時15分にスクリプトを実行します。 カスタムの
cronジョブを作成し、特定の日時にタスクをスケジュールする方法を学習しました。 ご質問がある場合は、コメントをお気軽にお寄せください。
* * * * * command(s)
* * * * * command(s)
定義済みマクロ
@yearly
(または
@annually
)-指定されたタスクを1年に1回、1月1日の午前0時(午前12:00)に実行します。
0 0 1 1 *
同等。
@monthly
指定したタスクを月の最初の日の真夜中に月に一度実行します。
0 0 1 * *
同等。
@weekly
指定されたタスクを日曜日の真夜中に週に1回実行します。
0 0 * * 0
同等です。
@daily
指定されたタスクを1日1回真夜中に実行します。
0 0 * * *
同等。
@hourly
指定されたタスクを1時間の始めに1時間に1回実行します。
0 * * * *
同等。
@reboot
システムの起動時(ブート時)に指定されたタスクを実行します。Linux Crontabコマンド
crontab -e
-crontabファイルを編集するか、存在しない場合は作成します。
crontab -l
-crontabファイルの内容を表示します。
crontab -r
現在のcrontabファイルを削除します。
crontab -i
削除する前にプロンプトで現在のcrontabファイルを削除します。
crontab -u
VISUAL
または
EDITOR
環境変数で指定されたエディターを使用してcrontabファイルを開きます。crontab変数
PATH=/usr/bin:/bin
設定されています。 呼び出しているコマンドがcronで指定されたパスに存在する場合、コマンドへの絶対パスを使用するか、cron
$PATH
変数を変更できます。 通常のスクリプトのように暗黙的に
:$PATH
を追加することはできません。デフォルトのシェルは
/bin/sh
設定されています。
SHELL
変数を変更すると、別のシェルを設定できます。Cronは、ユーザーのホームディレクトリからコマンドを呼び出します。
HOME
変数は、crontabの設定によって上書きできます。電子メール通知はcrontabの所有者に送信されます。 デフォルトの動作を上書きするには、メール通知を受信するすべてのメールアドレスのリスト(カンマ区切り)で
MAILTO
環境変数を使用できます。
MAILTO
が定義されているが空の場合(
MAILTO=""
)、メールは送信されません。crontabの制限
/etc/cron.deny
/
/etc/cron.allow
および
/etc/cron.allow
ファイルを使用して、どのユーザーが
crontab
コマンドにアクセスできるかを制御できます。 ファイルはユーザー名のリストで構成され、1行に1つのユーザー名が含まれます。
/etc/cron.deny
ファイルのみが存在し、空です。つまり、すべてのユーザーがcrontabコマンドを使用できます。 特定のユーザーに対してcrontabコマンドへのアクセスを拒否する場合は、このファイルにユーザー名を追加します。
/etc/cron.allow
ファイルが存在する場合、このファイルにリストされているユーザーのみが
crontab
コマンドを使用できます。
crontab
コマンドを使用できます。cronジョブの例
0 15 * * 1-5 command
dev null
にリダイレクトし、指定された電子メールアドレスには標準エラーのみが送信されます。
[email protected] */5 * * * * /path/to/script.sh > /dev/null
&&
使用します)。
0 15 * * Mon command1 && command2
*/2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
00 08-16 * * * /path/to/script.sh
0 7 1-7 * 1 /path/to/script.sh
15 9 1, 15 * * /path/to/script.sh
HOME
、
PATH
、
SHELL
および
MAILTO
変数を設定し、毎分コマンドを実行します。
HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * command
結論