GNU/Linux >> Linux の 問題 >  >> Linux

Crontabを使用したcronジョブのスケジューリング

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は、特定の日時にタスクをスケジュールできるデーモンです。

ご不明な点がございましたら、お気軽にコメントをお寄せください。


Linux
  1. Linuxcronコマンドを使用したタスクのスケジューリング

  2. LinuxでのCronを使用したシステムタスクのスケジューリング

  3. cronジョブのトラブルシューティング

  1. Notify-Send With Cronを使用していますか?

  2. CentOS7でcrontabを使用してシステムタスクを自動化する

  3. バッチ モードで Cron ジョブをインストール、編集、または削除する方法

  1. Crontabを使用してcronジョブをスケジュールする方法

  2. 通知送信によるcron

  3. crontab -r で誤って削除された cron ジョブを回復する