Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

マスター Linux Crontab:15 のエキスパート Cron ジョブ スケジューリングの例

マスター Linux Crontab:15 のエキスパート Cron ジョブ スケジューリングの例 経験豊富な Linux システム管理者は、定期的なメンテナンス ジョブをバックグラウンドで自動的に実行することの重要性を知っています。

Linux Cron ユーティリティは、特定の時間および/または日に継続的に日常的なバックグラウンド ジョブをスケジュールする効果的な方法です。

この記事は、現在進行中の「Geeks のための生産性向上のヒント」シリーズの一部です。この記事では、crontab ジョブ スケジューリングの 15 の素晴らしい例を見てみましょう。

Linux Crontab 形式

MIN HOUR DOM MON DOW CMD
フィールド 説明 許可される値 MINMinute フィールド 0 ~ 59HOURHour フィールド 0 ~ 23DOMDay of Month1 ~ 31MONMonth field1 ~ 12DOWDay Of Week 0 ~ 6CMDCommand実行するコマンド。

1.特定の時間にジョブをスケジュールする

cron の基本的な使い方は、以下のように指定した時間にジョブを実行することです。これにより、6 月 10 日午前 8 時 30 分に完全バックアップ シェル スクリプト (フルバックアップ) が実行されます。 。

時間フィールドは 24 時間形式を使用していることに注意してください。したがって、午前 8 時の場合は 8 を使用し、午後 8 時の場合は 20 を使用します。

30 08 10 06 * /home/ramesh/full-backup
  • 30 – 30 分
  • 08 – 午前08時
  • 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.バックグラウンド Cron ジョブを 10 分ごとにスケジュールします。

10 分ごとにディスク容量を確認する場合は、次のコマンドを使用します。

*/10 * * * * /home/ramesh/check-disk-space

年間を通して、指定されたコマンド check-disk-space を 10 分ごとに実行します。ただし、コマンドを勤務時間中にのみ実行するという要件がある場合や、その逆の場合もあります。上記の例は、それらのことを行う方法を示しています。

5 つのフィールドに値を指定する代わりに、以下に示すように 1 つのキーワードを使用して値を指定できます。

上記の 5 つのフィールドの代わりに、@ の後にキーワードを続けて使用できる特殊なケースがあります (再起動、午前 0 時、毎年、毎時など)。

キーワード 同等 @yearly0 0 1 1 *@daily0 0 * * *@hourly0 * * * *@reboot起動時に実行します。

8. @yearly

を使用して、毎年最初の 1 分間にジョブをスケジュールします。

ジョブを毎年最初の分に実行したい場合は、@yearly を使用できます。 以下に示す cron キーワード。

これにより、年次メンテナンス シェル スクリプトを使用して、毎年 1 月 1 日の 00:00 にシステムの年次メンテナンスが実行されます。

@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 ジョブを毎秒実行する方法。

1 秒ごとの cron ジョブをスケジュールすることはできません。 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 対 Anacron:Linux で Anacron をセットアップする方法 (例付き)
  • 5 分、秒、時間、日、月ごとに Cron を実行する方法
  • 6 Linux Crontab コマンドの例
  • バッチ モードで Cron ジョブをインストール、編集、または削除する方法
  • 9 つの例を使用して at、atq、atrm、batch コマンドを理解する

素晴らしい Linux 記事

以下に、15 個の素晴らしい例をいくつか示します。 役に立つかもしれない記事。

  • ママ、見つけたよ! — 15 の実用的な Linux Find コマンドの例
  • Linux コマンドラインの歴史をマスターするための 15 の例
  • Unix LS コマンド:15 の実践例
  • Grep をしっかり理解しましょう! – 15 の実用的な grep コマンドの例

  1. マスター Linux ファイル システム:/bin、/usr/bin、/sbin などについて理解する

    ラメシュ・ナタラジャン著 2010 年 9 月 8 日 特定のプログラムが /bin、/sbin、/usr/bin、または /usr/sbin に配置されている理由を疑問に思ったことはありますか? たとえば、less コマンドは /usr/bin ディレクトリにあります。 /bin、/sbin、または /usr/sbin ではないのはなぜでしょうか?これらすべてのディレクトリの違いは何ですか? この記事では、Linux のファイルシステム構造を確認し、個々の上位ディレクトリの意味を理解しましょう。 1. / – ルート すべてのファイルとディレクトリはルート ディレクトリから始

  2. Bashツールを使用してLinuxシステム構成のスクリーンショットを作成します

    Linux構成を他の人と共有したい理由はたくさんあります。システムの問題のトラブルシューティングに役立つ情報を探している場合もあれば、作成した環境を非常に誇りに思っているため、他のオープンソース愛好家に紹介したい場合もあります。 その情報の一部は、 cat / proc / cpuinfoで取得できます。 またはlscpu Bashプロンプトでコマンドを実行します。ただし、オペレーティングシステム、カーネル、稼働時間、シェル環境、画面解像度などの詳細を共有したい場合は、screenFetchとNeofetchの2つの優れたツールを選択できます。 ScreenFetch Screen