アンドロイド

crontabを使用してcronジョブをスケジュールする

目次:

Anonim

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ジョブを実行するユーザーを指定する追加の必須ユーザーフィールドが含まれています。

* * * * * command(s) * * * * * command(s)

定義済みマクロ

共通の間隔を指定するために使用されるいくつかの特別なCronスケジュールマクロがあります。 5列の日付指定の代わりにこのショートカットを使用できます。

  • @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コマンドを使用すると、編集のためにcrontabファイルをインストールまたは開くことができます。

crontabコマンドを使用して、次のオプションを使用して、cronジョブを表示、追加、削除、または変更できます。

  • crontab -e -crontabファイルを編集するか、存在しない場合は作成します。 crontab -l -crontabファイルの内容を表示します。 crontab -r 現在のcrontabファイルを削除します。 crontab -i 削除する前にプロンプ​​トで現在のcrontabファイルを削除します。 crontab -u -他の使用crontabファイルを編集します。 システム管理者権限が必要です。

crontabコマンドは、 VISUAL または EDITOR 環境変数で指定されたエディターを使用してcrontabファイルを開きます。

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 および /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時まで、毎日1時間ごとにスクリプトを実行します。

    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ジョブを作成し、特定の日時にタスクをスケジュールする方法を学習しました。

ご質問がある場合は、コメントをお気軽にお寄せください。

cron crontab端末