Cronは、指定された間隔でタスクを実行するスケジューリングデーモンです。これらのタスクはcronジョブと呼ばれ、主にシステムの保守または管理を自動化するために使用されます。
たとえば、cronジョブを設定して、データベースやデータのバックアップ、最新のセキュリティパッチによるシステムの更新、ディスクスペースの使用状況の確認、メールの送信などの反復的なタスクを自動化できます。
cronジョブは、分、時間、曜日、月、曜日、またはこれらの任意の組み合わせで実行するようにスケジュールできます。
Crontabファイル#とは
Crontab(cronテーブル)は、cronジョブのスケジュールを指定するテキストファイルです。 crontabファイルには2つのタイプがあります。システム全体のcrontabファイルと個々のユーザーのcrontabファイル。
ユーザーのcrontabファイルは、ユーザーの名前に基づいて名前が付けられ、その場所はオペレーティングシステムによって異なります。 CentOSなどのRedHatベースのディストリビューションでは、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}
内にスクリプトを配置することもできます。 ディレクトリ、およびスクリプトは時間/日/週/月
ごとに実行されます 。
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
がある場合 Hourフィールドでは、アクションが4時間ごとに実行されることを意味します。0,4,8,12,16,20
を指定するのと同じです 。スラッシュ演算子の前のアスタリスクの代わりに、値の範囲1-30 / 10
を使用することもできます。1,11,21
と同じ意味です 。
システム全体のCrontabファイル#
システム全体のcrontabファイルの構文は、ユーザーのcrontabとは少し異なります。 cronジョブを実行するユーザーを指定する追加の必須ユーザーフィールドが含まれています。
* * * * * <username> command(s)
事前定義されたマクロ#
共通の間隔を指定するために使用されるいくつかの特別なcronスケジュールマクロがあります。これらのショートカットは、5列の日付指定の代わりに使用できます。
-
@yearly
(または@annually
)-1月1日の深夜(午前12:00)に、指定されたタスクを年に1回実行します。0 0 1 1 *
と同等 。 -
@monthly
-指定されたタスクを月に1回、月の初日の深夜に実行します。0 0 1 * *
と同等 。 -
@weekly
-指定されたタスクを週に1回、日曜日の深夜に実行します。0 0 * * 0
と同等 。 -
@daily
-指定されたタスクを1日1回深夜に実行します。0 0 * * *
と同等 。 -
@hourly
-指定されたタスクを1時間の初めに1時間に1回実行します。0 * * * *
と同等 。 -
@reboot
-システムの起動時(起動時)に指定されたタスクを実行します。
Linux Crontabコマンド#
crontab
コマンドを使用すると、編集用にcrontabファイルをインストール、表示、または開くことができます。
-
crontab -e
-crontabファイルを編集するか、まだ存在しない場合は作成します。 -
crontab -l </ code> -crontabファイルの内容を表示します。
-
crontab -r
-現在のcrontabファイルを削除します。 -
crontab -i
-削除する前に、プロンプトを表示して現在のcrontabファイルを削除します。 -
crontab-u<ユーザー名>
-他のユーザーのcrontabファイルを編集します。このオプションには、システム管理者権限が必要です。
crontabコマンドは、 VISUAL
で指定されたエディターを使用してcrontabファイルを開きます。 またはEDITOR
環境変数。
crontab変数#
cronデーモンは、いくつかの環境変数を自動的に設定します。
- デフォルトのパスは
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
ファイルを使用すると、 crontab
にアクセスできるユーザーを制御できます。 指図。ファイルは、ユーザー名のリストで構成され、1行に1つのユーザー名が含まれます。
デフォルトでは、 /etc/cron.deny
のみ ファイルが存在し、空です。これは、すべてのユーザーがcrontabコマンドを使用できることを意味します。特定のユーザーに対するcrontabコマンドへのアクセスを拒否する場合は、このファイルにユーザー名を追加します。
/etc/cron.allow
の場合 ファイルが存在するのは、このファイルにリストされているユーザーのみが crontab
を使用できることです。 コマンド。
どちらのファイルも存在しない場合、管理者権限を持つユーザーのみが crontab
を使用できます。 コマンド。
cronジョブの例#
以下は、さまざまな期間に実行するタスクをスケジュールする方法を示すcronジョブの例です。
-
月曜日から金曜日までの毎日15:00にコマンドを実行します:
0 15 * * 1-5 command
-
5分ごとにスクリプトを実行し、標準出力を
dev null
にリダイレクトします 、指定された電子メールアドレスには標準エラーのみが送信されます:[email protected] */5 * * * * /path/to/script.sh > /dev/null
-
毎週月曜日の午後3時に2つのコマンドを実行します(演算子
&&
を使用します コマンド間):0 15 * * Mon command1 && command2
-
2分ごとにPHPスクリプトを実行し、出力をファイルに書き込みます。
*/2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
-
毎日、毎時、毎時、午前8時から午後4時までスクリプトを実行します。
00 08-16 * * * /path/to/script.sh
-
毎月第1月曜日の午前7時にスクリプトを実行します。
0 7 1-7 * 1 /path/to/script.sh
-
毎月1日と15日の午後9時15分にスクリプトを実行します。
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
結論#
Cronは、特定の日時にタスクをスケジュールできるデーモンです。
ご不明な点がございましたら、お気軽にコメントをお寄せください。