同じタスクを何度も繰り返すのは、かなり面倒な作業になる可能性があります。 cronジョブをスケジュールすると、ユーザーは仮想プライベートサーバーまたはUnixライクなオペレーティングシステムでタスクを自動化できます。これにより貴重な時間が節約され、ユーザーは他の重要なタスクに集中できます。
この初心者向けの包括的なガイドでは、タイプ、構文、特殊な文字列、権限など、cronジョブの基本を学習します。この記事の終わりまでに、cronジョブを使用してタスクをより効率的にスケジュールできるようになります。
Cronジョブとは何ですか?
cron は、ユーザーが特定の時間にタスクを繰り返しスケジュールするためのコマンドを入力できるようにするユーティリティプログラムです。 cronでスケジュールされたタスクは、cronジョブと呼ばれます。 。ユーザーは、自動化するタスクの種類と、それをいつ実行するかを決定できます。
cronはデーモンであり、非対話型ジョブを実行するバックグラウンドプロセスです。 Windowsでは、サービスなどのバックグラウンドプロセスに精通している場合があります。 cronデーモンと同様に機能します。
デーモンは常にアイドル状態であり、特定のタスクを実行するように要求するコマンドを待機しています。このコマンドは、ネットワーク上の任意のコンピューターに入力できます。
cronファイルは、特定の時間に定期的に実行するコマンドを含む単純なテキストファイルです。デフォルトのシステムcronテーブルまたはcrontab構成ファイルは/etc / crontabです。 、crontabディレクトリ/etc/cron.*/内にあります 。
システム管理者のみがシステムcrontabファイルを編集できます。ただし、Unixライクなオペレーティングシステムは複数の管理者をサポートしています。それぞれがcrontabファイルを作成し、コマンドを記述して、いつでもジョブを実行できます。
cronジョブを使用すると、ユーザーはシステムメンテナンス、ディスクスペースの監視を自動化し、バックアップをスケジュールできます。その性質上、cronジョブは、サーバーなど、24時間年中無休で動作するコンピューターに最適です。
cronジョブは主にシステム管理者によって使用されますが、Web開発者にとっても有益な場合があります。
たとえば、ウェブサイトの管理者は、毎日深夜にサイトを自動的にバックアップするcronジョブを設定し、毎週月曜日の深夜にリンク切れをチェックするcronジョブを設定し、毎週金曜日の正午にサイトキャッシュをクリアするcronジョブを設定できます。
ただし、他のプログラムと同様に、cronには使用する前に考慮する必要のある制限があります。
- ジョブ間の最短間隔は60秒です 。 cronを使用すると、59秒以内にジョブを繰り返すことはできません。
- 1台のコンピューターに集中化。 cronジョブは、ネットワーク上の複数のコンピューターに分散することはできません。そのため、cronを実行しているコンピューターがクラッシュした場合、スケジュールされたタスクは実行されず、失われたジョブは手動でのみ実行できます。
- 自動再試行メカニズムはありません 。 Cronは、厳密に指定された時間に実行されるように設計されています。タスクが失敗した場合、次にスケジュールされた時刻までタスクは再度実行されません。これにより、cronはインクリメンタルタスクには不適切になります。
これらの制限があるため、cronは、少なくとも60秒の定期的な間隔で特定の時間に実行される単純なタスクに最適なソリューションです。
後で1回限りのジョブをスケジュールする場合は、別の方法を使用することをお勧めします。
このチュートリアルでは、Linux上のBashや別のUnixライクなオペレーティングシステムなどのシェルプログラムにコマンドを入力して、cronジョブをスケジュールする方法を説明します。
HostingerのVPSホスティングは、Linuxベースのオペレーティングシステムで実行されます。したがって、cronジョブのスケジュール方法を学習すると、VPS管理者としての作業効率が大幅に向上します。 VPSのコマンドラインには、PuTTYSSHを介してアクセスできます。
cronの基本的な操作に進む前に、さまざまなcronジョブ構成ファイルを知っておくことが重要です。
- システムのcrontab。 これを使用して、root権限でのみ変更できるシステム全体の重要なジョブをスケジュールします。
- ユーザーのcrontab。 このファイルを使用すると、ユーザーはユーザーレベルでのみ適用されるcronジョブを作成および編集できます。
システムのcrontabを編集する場合は、現在のユーザーがroot権限を持っていることを確認してください。
cronが実行できる基本的な操作は次のとおりです。
crontabファイルを作成または編集するには 、コマンドラインに次のように入力します。
crontab -e
システムにcrontabファイルが見つからない場合、コマンドは自動的に新しいファイルを作成します。 crontab -e cronジョブを追加、編集、および削除できます。
viのようなテキストエディタが必要です またはナノ crontabファイルを編集します。 crontab -eを入力する場合 初めて、ファイルを編集するテキストエディタを選択するように求められます。
アクティブなスケジュールされたタスクのリストを表示するには システムで、次のコマンドを入力します。
crontab -l </ code>
システムに複数のユーザーがいる場合は、ユーザーのcrontabファイルリストを表示することができます。 スーパーユーザーとして次のコマンドを入力します。
crontab -u username -l </ code>
他のユーザーのスケジュールされたジョブを簡単に編集することもできます 次のcrontabコマンドを入力します:
sudo su crontab -u username -e
root権限を自分に与えるため 、 sudo suを追加します コマンドの先頭まで。これを含む一部のコマンドは、rootユーザーのみが実行できます。
最後に、スケジュールされたすべてのタスクを削除するには crontabファイルで最初からやり直して、次のコマンドを入力します。
crontab -r
または、次のコマンドは crontab -rと同じです。 、ただし、crontabを削除する前にyes/noオプションでユーザーにプロンプトを表示する場合を除きます。
crontab -i
crontabに加えて、rootユーザーは etc / cron.dにcronジョブを追加することもできます。 ディレクトリ。自動インストールと自動更新のスクリプトを実行するのに最適です。
このディレクトリにcronジョブを追加するユーザーは、rootアクセス権を持ち、run-partsの命名規則に準拠している必要があることに注意してください。
または、rootユーザーがスクリプトを次のディレクトリに移動して、実行をスケジュールすることもできます。
- /etc/cron.hourly/ –すべてのスクリプトを1時間に1回実行する
- /etc/cron.daily/ –1日1回実行します。
- /etc/cron.weekly/ –週に1回実行します。
- /etc/cron.monthly/ –月に1回実行します。
crontab構文
cronジョブを作成するには、最初にcronの構文とフォーマットを理解する必要があります。そうしないと、cronジョブを正しく設定できない可能性があります。
crontab構文は、次の可能な値を持つ5つのフィールドで構成されています。
- 分。 コマンドが実行される時間の分(0〜59の範囲)。
- 時間。 コマンドが実行される時間。24時間表記では0〜23の範囲です。
- 月の日 。ユーザーがコマンドの実行を希望する曜日。範囲は1〜31です。
- 月 。ユーザーがコマンドの実行を希望する月。範囲は1〜12で、1月から12月を表します。
- 曜日。 コマンドを実行する曜日。0〜6の範囲で、日曜日〜土曜日を表します。一部のシステムでは、値7は日曜日を表します。
どのフィールドも空白のままにしないでください。
たとえば、 root / backup.shを実行するようにcronジョブを設定する場合 毎週金曜日の午後5時37分、cronコマンドは次のようになります。
37 17 * * 5 root / backup.sh
上記の例では、 37 および17 午後5時37分を表します。 月の日の両方のアスタリスク および月 フィールド 可能なすべての値を示します。これは、日付や月に関係なく、タスクを繰り返す必要があることを意味します。最後に、 5 金曜日を表します。次に、一連の番号の後にタスク自体の場所が続きます。
cron構文を手動で作成するかどうかわからない場合は、Crontab GeneratorやCrontab.guruなどの無料ツールを使用して、コマンドに必要な日時の正確な数値を生成できます。
cronコマンドの正しい時刻を設定するには、cronジョブ演算子の知識が不可欠です。各フィールドに入力する値を指定できます。すべてのcrontabファイルで適切な演算子を使用する必要があります。
- アスタリスク(*) 。この演算子を使用して、フィールドで可能なすべての値を示します。たとえば、cronジョブを毎分実行する場合は、分にアスタリスクを記述します。 フィールド。
- カンマ(、) 。この演算子を使用して、複数の値をリストします。たとえば、 1,5と書く 曜日 フィールドは、毎週月曜日と金曜日に実行されるタスクをスケジュールします。
- ハイフン(-) 。この演算子を使用して、値の範囲を決定します。たとえば、6月から9月にcronジョブを設定する場合は、 6-9と記述します。 月 フィールドがその役割を果たします。
- セパレーター(/) 。この演算子を使用して、値を除算します。たとえば、スクリプトを12時間ごとに実行する場合は、 * / 12と記述します。 時間 フィールド。
- 最後 (L) 。この演算子は、曜日および曜日のフィールドで使用できます。たとえば、 3Lと書く 曜日フィールドは、月の最後の水曜日を意味します。
- 平日 (W) 。この演算子を使用して、特定の時刻から最も近い平日を判別します。たとえば、1番目の場合 月のは土曜日で、 1Wと書いています [日]フィールドで、次の月曜日(3日)にコマンドを実行します 。
- ハッシュ (#)。 この演算子を使用して曜日を決定し、その後に1から5までの数字を続けます。たとえば、 1#2 はその月の第2月曜日を意味します。
- 疑問符 (?) 。この演算子を使用して、「曜日」フィールドと「曜日」フィールドに「特定の値なし」を入力します。
cronジョブの特殊文字列
特別な文字列は、ユーザーが入力する数値の論理セットを理解する必要なしに、時間間隔でcronジョブをスケジュールするために使用されます。それらを使用するには、 @と書いてください 簡単なフレーズが続きます。
コマンドで使用できる便利な特殊文字列は次のとおりです。
- @hourly 。ジョブは1時間に1回実行されます。
- @daily または@midnight 。これらの文字列は、毎日深夜にタスクを実行します。
- @weekly 。これを使用して、週に1回、日曜日の深夜にジョブを実行します。
- @monthly。 この特別な文字列は、毎月1日に1回コマンドを実行します。
- @yearly 。これを使用して、1月1日の深夜に年に1回タスクを実行します。
- @reboot 。この文字列を使用すると、ジョブは起動時に1回だけ実行されます。
重要!タイムゾーンに依存するcronジョブをスケジュールするときは特に注意してください。
正しいcron構文がどのように見えるかがわかったので、それをよりよく理解するのに役立ついくつかの例を見ていきます。
cron出力はローカルの電子メールアカウントに自動的に送信されることに注意してください。メールの受信を停止したい場合は、> / dev / null 2>&1を追加できます。 次の例のようなコマンドに:
0 5 * * * /root/backup.sh> / dev / null 2>&1
出力を特定のメールアカウントに送信する場合は、 MAILTOを追加します その後にメールアドレスが続きます。次に例を示します:
MAILTO="[email protected]" 0 3 * * * /root/backup.sh >/dev/null 2>&1
cron構文をよりよく理解するには、次のサンプルコマンドを参照してください。
例 | 説明 |
0 0 * * 0 /root/backup.sh | 毎週日曜日の深夜にバックアップを実行します。 |
0 * * * 1 /root/clearcache.sh | 月曜日は1時間ごとにキャッシュをクリアします。 |
0 6,18 * * * /root/backup.sh | データを1日2回、午前6時と午後6時にバックアップします。 |
* / 10 * * * * /scripts/monitor.sh | 10分ごとに監視を実行します。 |
* / 15 * * * * /root/backup.sh | 15分ごとにバックアップを実行します。 |
* * 20 7 * /root/backup.sh | 7月20日に毎分バックアップを実行します。 |
0 22 * * 1-5 /root/clearcache.sh | 毎週平日(月曜日から金曜日)の午後10時にキャッシュをクリアします。 |
0 0 * * 2 * /root/backup.sh | 毎週火曜日の深夜にバックアップを実行します。 |
* * * 1,2,5 * /scripts/monitor.sh | 1月、2月、5月の間、毎分監視を実行します。 |
10-59 / 10 5 * * * /root/clearcache.sh | 午前5時10分から、午前5時に10分ごとにキャッシュをクリアします。 |
0 8 1 * / 3 * /home/user/script.sh | タスクを四半期ごとに月の初日の午前8時に実行します。 |
0 * * * * /root/backup.sh | 1時間ごとにバックアップを作成します。 |
* * * * * /scripts/script.sh; /scripts/scrit2.sh | 単一のcronジョブに複数のタスクを含めます。複数のタスクを同時に実行するようにスケジュールするのに便利です。 |
@reboot /root/clearcache.sh | システムの電源を入れるたびにキャッシュをクリアします。 |
0 8 1-7 * 1 /scripts/script.sh | 毎月第1月曜日の午前8時にスクリプトを実行します。 |
5 4 * * 0 /root/backup.sh | 毎週日曜日の午前4時5分にバックアップを作成します。 |
15 9 1,20 * * /scripts/monitor.sh | 毎月1日と20日の午後9時15分に監視を実行します。 |
@hourly /scripts/monitor.sh | 1時間ごとに監視を実行します。 |
0 0 1,15 * 3 /scripts/script.sh | 毎月1日から15日まで、毎週水曜日の深夜にスクリプトを実行します。 |
15 14 1 * * /root/clearcache.sh | 毎月1日の午後2時15分にキャッシュをクリアします。 |
00 08-17 * * 1-5 bin / check-db-status | データベースのステータスを毎日月曜日から金曜日の午後8時から午後5時まで1時間ごとに確認します。 |
15 6 1 1 * /root/backup.sh | 毎年1月1日午前6時15分にバックアップを実行します。 |
0 0 * * * /scripts/monitor.sh | 監視スクリプトを1日1回深夜に実行します。 |
0 0 15 * * /root/clearcache.sh | 毎月15日の深夜にキャッシュをクリアします。 |
* * * * 1,5 /scripts/monitor.sh | 毎週月曜日と金曜日に監視を実行します。 |
cronのアクセス許可
次の2つのファイルを作成または編集して、ユーザーがシステムのcronファイルを使用できるようにするか制限することができます。
- /etc/cron.allow – cron.allowの場合 存在する場合は、ユーザーがcronジョブを使用できるようにするためのユーザー名が含まれている必要があります。
- /etc/cron.deny – cron.allowの場合 存在しませんが、 cron.deny cronジョブを使用するユーザーは、ファイル内にリストされてはなりません。
結論
自動的にスケジュールされたジョブを設定することは、重要なタスクを忘れないようにする実用的なソリューションです。
cronジョブは、システム管理者やWeb開発者が反復的なタスクを管理するための優れた方法です。実行する必要があるのは、適切なコマンドを入力し、正しい実行時間を選択することだけです。
cronジョブをスケジュールするには、コマンドラインで正しい構文を使用します。または、特別な文字列を使用してプロセスを簡単にすることもできます。許可されたユーザーのみがcronファイルにアクセスできるように、適切なアクセス許可を割り当てることを忘れないでください。
WordPress固有のソリューションをお探しの場合は、WordPresscronジョブチュートリアルをご覧ください。
この記事が、cronジョブを使用してタスクをスケジュールするための基本を理解するのに役立つことを願っています。ご不明な点がございましたら、コメント欄にご記入ください。