経験豊富な Linux システム管理者は、定期的なメンテナンス ジョブをバックグラウンドで自動的に実行することの重要性を認識しています。
Linux Cron ユーティリティは、定期的なバックグラウンド ジョブを特定の時間や日に継続的にスケジュールする効果的な方法です。
この記事は、現在進行中の生産性向上のためのオタク向けヒント シリーズの一部です。この記事では、crontab ジョブ スケジューリングの 15 のすばらしい例を紹介します。
Linux Crontab フォーマット
MIN HOUR DOM MON DOW CMD
フィールド | 説明 | 許容値 |
---|---|---|
MIN | 分フィールド | 0 ~ 59 |
時間 | 時間フィールド | 0 ~ 23 |
DOM | 日 | 1-31 |
月 | 月フィールド | 1-12 |
ダウ | 曜日 | 0-6 |
CMD | コマンド | 実行するコマンド。 |
1.特定の時間にジョブをスケジュールする
cron の基本的な使い方は、以下に示すように特定の時間にジョブを実行することです。これにより、6 月 10 日午前 8 時 30 分にフル バックアップ シェル スクリプト (フル バックアップ) が実行されます。 .
時間フィールドは 24 時間形式を使用することに注意してください。したがって、午前 8 時は 8 を使用し、午後 8 時は 20 を使用します。
30 08 10 06 * /home/ramesh/full-backup
- 30 – 30分
- 08 – 午前 8 時
- 10 – 10日目
- 06 – 6月(6月)
- * – 毎日
2.複数のインスタンスのジョブをスケジュールする (例:1 日 2 回)
次のスクリプトは、毎日 1 日 2 回増分バックアップを作成します。
この例では、指定された増分バックアップ シェル スクリプト (incremental-backup) を毎日 11:00 と 16:00 に実行します。フィールド内のカンマ区切りの値は、指定された時間内にコマンドを実行する必要があることを示します。
00 11,16 * * * /home/ramesh/bin/incremental-backup
- 00 – 0 分 (時間の先頭)
- 11,16 – 午前 11 時と午後 4 時
- * – 毎日
- * – 毎月
- * – 毎日
3.特定の時間範囲でジョブをスケジュールする (例:平日のみ)
特定の時間範囲で 1 時間ごとにジョブをスケジュールする場合は、次を使用します。
勤務時間中の毎日の cron ジョブ
この例では、毎日 (週末を含む) 午前 9 時から午後 6 時までの勤務時間中にデータベースの状態をチェックします
00 09-18 * * * /home/ramesh/bin/check-db-status
- 00 – 0 分 (時間の先頭)
- 09-18 – 午前 9 時、午前 10 時、午前 11 時、午前 12 時、午後 1 時、午後 2 時、午後 3 時、午後 4 時、午後 5 時、午後 6 時
- * – 毎日
- * – 毎月
- * – 毎日
平日の勤務時間中の cron ジョブ
この例では、平日 (土日を除く) の午前 9 時から午後 6 時までデータベースのステータスを確認します。
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
- 00 – 0 分 (時間の先頭)
- 09-18 – 午前 9 時、午前 10 時、午前 11 時、午前 12 時、午後 1 時、午後 2 時、午後 3 時、午後 4 時、午後 5 時、午後 6 時
- * – 毎日
- * – 毎月
- 1~5 -月、火、水、木、金 (平日)
4. Crontab エントリを表示する方法
現在ログインしているユーザーの Crontab エントリを表示
crontab エントリを表示するには、以下に示すように、UNIX アカウントから crontab -l と入力します。
ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: This displays crontab of the current logged in user]
ルート Crontab エントリを表示
root ユーザー (su – root) としてログインし、以下に示すように crontab -l を実行します。
root@dev-db# crontab -l no crontab for root
Crontab の使い方:他の Linux ユーザーの Crontab エントリを表示する
他の Linux ユーザーの crontab エントリを表示するには、root にログインして -u {username} -l を使用します 以下に示すように。
root@dev-db# crontab -u sathiya -l @monthly /home/sathiya/monthly-backup 00 09-18 * * * /home/sathiya/check-db-status
5. Crontab エントリを編集する方法
現在ログインしているユーザーの Crontab エントリを編集
crontab エントリを編集するには、以下に示すように crontab -e を使用します。デフォルトでは、現在ログインしているユーザーの crontab を編集します。
ramesh@dev-db$ crontab -e @yearly /home/ramesh/centos/bin/annual-maintenance */10 * * * * /home/ramesh/debian/bin/check-disk-space ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C [Note: This will open the crontab file in Vim editor for editing. Please note cron created a temporary /tmp/crontab.XX... ]
上記の一時ファイルを :wq で保存すると、crontab が保存され、crontab が正常に変更されたことを示す次のメッセージが表示されます。
~ "crontab.XXXXyjWkHw" 2L, 83C written crontab: installing new crontab
ルート Crontab エントリの編集
root ユーザー (su – root) としてログインし、以下に示すように crontab -e を実行します。
root@dev-db# crontab -e
他の Linux ユーザーの Crontab ファイル エントリを編集する
他の Linux ユーザーの crontab エントリを編集するには、root にログインして -u {username} -e を使用します 以下に示すように。
root@dev-db# crontab -u sathiya -e @monthly /home/sathiya/fedora/bin/monthly-backup 00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status ~ ~ ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C
6. cron を使用して毎分ジョブをスケジュールします。
理想的には、毎分ジョブをスケジュールする必要がない場合があります。ただし、この例を理解すると、この記事で後述する他の例を理解するのに役立ちます。
* * * * * CMD
* は、可能なすべての単位を意味します。つまり、年間を通して毎時毎分です。この * を直接使用するだけでなく、次の場合に非常に役立つことがわかります。
- 分フィールドに */5 を指定すると、5 分ごとを意味します。
- 分のフィールドに 0-10/2 を指定すると、最初の 10 分間は 2 分ごとを意味します。
- したがって、上記の規則は他の 4 つのフィールドすべてに使用できます。
7. 10 分ごとにバックグラウンド cron ジョブをスケジュールします。
10 分ごとにディスク容量を確認したい場合は、以下を使用してください。
*/10 * * * * /home/ramesh/check-disk-space
指定されたコマンド check-disk-space を 1 年を通して 10 分ごとに実行します。ただし、営業時間中にのみコマンドを実行する必要がある場合や、その逆の場合もあります。上記の例は、その方法を示しています。
5 つのフィールドに値を指定する代わりに、以下に示すように 1 つのキーワードを使用して値を指定できます。
上記の 5 つのフィールドの代わりに、@ の後にキーワードを使用できる特別なケースがあります — たとえば、reboot、midnight、yearly、hourly などです。
キーワード | 同等 |
---|---|
@年次 | 0 0 1 1 * |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
@reboot | 起動時に実行 |
8. @yearly を使用して、毎年最初の 1 分間にジョブをスケジュールします
毎年最初の 1 分にジョブを実行する場合は、@yearly を使用できます。 以下に示すように cron キーワード。
これにより、毎年 1 月 1 日の 00:00 に、annual-maintenance シェル スクリプトを使用してシステムの年次メンテナンスが実行されます。
@yearly /home/ramesh/red-hat/bin/annual-maintenance
9. @monthly を使用して、毎月初めに cron ジョブをスケジュールします
上記の @yearly と同様です。ただし、@monthly を使用して毎月 1 回コマンドを実行します cron キーワード。
これにより、毎月 1 日の 00:00 にシェル スクリプトのテープ バックアップが実行されます。
@monthly /home/ramesh/suse/bin/tape-backup
10. @daily を使用してバックグラウンド ジョブを毎日スケジュールする
@daily の使用 cron キーワードを使用すると、毎日 00:00 に cleanup-logs シェル スクリプトを使用してログ ファイルのクリーンアップが毎日実行されます。
@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"
11. @reboot を使用して再起動するたびに Linux コマンドを実行する方法
@reboot の使用 cron キーワードを使用すると、毎回マシンが起動された後に、指定されたコマンドが 1 回実行されます。
@reboot CMD
12. MAIL キーワードを使用して Crontab メール出力を無効化/リダイレクトする方法
デフォルトでは、crontab は、ジョブをスケジュールしたユーザーにジョブ出力を送信します。出力を特定のユーザーにリダイレクトする場合は、以下に示すように、crontab で MAIL 変数を追加または更新します。
ramesh@dev-db$ crontab -l MAIL="ramesh" @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: Crontab of the current logged in user with MAIL variable]
メールがどこにも送信されないようにしたい場合、つまり、crontab 出力のメール送信を停止したい場合は、以下に示すように、crontab の MAIL 変数を追加または更新してください。
MAIL=""
13. Crontab を使用して毎秒 Linux Cron ジョブを実行する方法。
毎秒の cronjob をスケジュールすることはできません。 cron では、指定できる最小単位が分であるためです。典型的なシナリオでは、ほとんどの人がシステムで毎秒ジョブを実行する理由はありません。
14. Crontab で PATH 変数を指定
上記のすべての例では、実行する必要がある Linux コマンドまたはシェル スクリプトの絶対パスを指定しました。
たとえば、/home/ramesh/tape-backup を指定する代わりに、tape-backup のみを指定する場合は、以下に示すように、パス /home/ramesh を crontab の PATH 変数に追加します。
ramesh@dev-db$ crontab -l PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh @yearly annual-maintenance */10 * * * * check-disk-space [Note: Crontab of the current logged in user with PATH variable]
15. Cron ファイルからの Crontab のインストール
crontab ファイルを直接編集する代わりに、最初にすべてのエントリを cron ファイルに追加することもできます。これらのエントリをすべてファイルに入れたら、以下に示すように、それらを cron にアップロードまたはインストールできます。
ramesh@dev-db$ crontab -l no crontab for ramesh $ cat cron-file.txt @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space ramesh@dev-db$ crontab cron-file.txt ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space
注: これにより、cron-file.txt が crontab にインストールされ、古い cron エントリも削除されます。そのため、cron-file.txt から cron エントリをアップロードするときは注意してください。
その他の Cron チュートリアル
- Cron Vs Anacron:Linux で Anacron をセットアップする方法 (例を使用)
- 5 分、秒、時間、日、月ごとに cron を実行する方法
- 6 Linux Crontab コマンドの例
- バッチ モードで Cron ジョブをインストール、編集、または削除する方法
- 9 つの例を使用して at、atq、atrm、batch コマンドを理解する
すばらしい Linux 記事
以下は素晴らしい 15 の例です。 役に立つと思われる記事
- ママ、見つけたよ! — 15 の実用的な Linux 検索コマンドの例
- Linux コマンドラインの歴史をマスターするための 15 の例
- Unix LS コマンド:15 の実例
- Grep をつかもう! – 15 の実用的な grep コマンドの例