Linux の Crontab – リアルタイムの例とツールを使用

公開: 2015-07-26

crontab、そのコマンド、および Crontab に関連するさまざまな操作について調べてみましょう。

cron ユーティリティを使用してタスクをスケジュールする方法を学習し、最後に、cron コマンドのフォーマットとテストに役立ついくつかのオンライン ツールについても説明します。

Crontab は「 cron テーブル」の略です。 cron という言葉は、ギリシャ語で時間を意味するChronosから取られたものです。 Crontab は、スケジュールされた時間に従っていくつかのタスクとジョブを自動的に実行するシステム デーモン プロセスです。

ユースケース

Crontab は、自動バックアップの処理、ログ ファイルのローテーション、リモート マシン間のファイルの同期、一時フォルダーのクリアなど、さまざまな操作を実行するのに役立ちます。システム管理タイプの仕事.

管理者は cron を使用して、特定の日時にジョブを実行するようにスケジュールできます。

それでは、これを設定する方法を見てみましょう。

Crontab 構文

コマンドのリストを実行するために、cron ユーティリティは構成ファイルを読み取ります。 crontab構成テーブルの行を解釈するには、Crontab 構文に従います。 Crontab には 6 つのフィールドがあり、最初の 5 つのフィールド (1 ~ 5) は実行の日時を定義します。 最後のフィールド、つまり 6 番目のフィールドは、実行するユーザー名および/またはタスク /job/command/script です。

* * * * * USER_NAME コマンド/実行スクリプト

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________曜日 (0 – 6) (0 は日曜日、または名前を使用)
│ │ │ | ____________月 (1 – 12)、* は毎月を意味します
│ │ | ______________日 (1 – 31)、* は毎日を意味します
│ | ________________時間 (0 – 23)、* は毎時を意味します
| | ____________________分 (0 – 59)、* は毎分を意味します

:

  • アスタリスク (*) は、フィールドのすべての可能な値を照合するために使用されます。 たとえば、時間フィールドで使用されるアスタリスクはすべての時間に相当し、月フィールドのアスタリスクは毎月に相当します。
  • ユーザー名はオプションです (システムの crontab ファイルの場合のみ使用可能)

例:

上記の構文をいくつかの例で理解しましょう

1. cron を毎日午前 5 時に実行するようにスケジュールする

0 5 * * * /scripts/job.sh

2. 1 日 2 回、午前 6 時と午後 6 時に実行するように cron をスケジュールします。

 0 6,18 * * * /scripts/job.sh

3.毎分実行するようにcronをスケジュールします

* * * * * /scripts/job.sh

4. 毎週月曜日の午後 7 時に cron を実行するようにスケジュールします。

 0 19 * * mon /scripts/job.sh

5. cron を 15 分ごとに実行するようにスケジュールします。

 */10 * * * * /scripts/job.sh

6. 選択した月に実行するように cron をスケジュールします

* * * feb,jun,oct * /script/job.sh

7. 3 月 4 日午前 7 時 25 分にシェル スクリプト/home/script/backup.shを実行します。

 25 7 4 3 * /home/script/backup.sh

8. cron を 30 秒ごとに実行するようにスケジュールします。

Crontab では秒数を制御できないため、以下の 2 段階のプロセスで実現できます。

  • まず、毎分実行されるタスクをスケジュールしてみましょう。
 * * * * * /home/scripts/script.sh
  • sleepコマンドを使用して、実行を 30 秒間一時停止します。
 * * * * * sleep 30; /home/scripts/script.sh

上記のタスクは実行を 30 秒間停止し、再び再開します。

Cron 構成ファイルのタイプ

Cron 構成ファイルには、次の 2 種類があります。

UNIX/Linux システムの Crontab

通常、システム サービスや重要なジョブに使用されるため、これには root 権限が必要です。 6 番目のフィールド (上記の構文の説明) は、コマンドを実行するユーザーの名前です。 これにより、システムの crontab が任意のユーザーとしてコマンドを実行できるようになります。

ユーザー crontab

ユーザーは、crontab コマンドを使用して独自の cron ジョブをインストールすることもできます。 ここでも、(上記の構文説明の) 6 番目のフィールドは実行するコマンドであり、すべてのコマンドは crontab を作成したユーザーとして実行されます。 各ユーザーは独自の crontab ファイルを持つことができます。これらは/var/spool/cron/ crontabs 内のファイルですが、直接編集することは意図されていません。 独自の cron ジョブを編集または設定するには、crontab コマンドを使用する必要があります。

それはどのように機能しますか?

cron サービス (デーモン) はバックグラウンドで実行され、 /etc/crontabファイルと/etc/cron.*/ディレクトリを常に (毎分) チェックします。 また、 /var/spool/cron/ディレクトリもチェックします。 コマンドは、分、時間、および月のフィールドが現在の時刻と一致し、2 日間のフィールド (月の日または曜日) の少なくとも 1 つが現在の日付と一致する場合に、 cronによって実行されます。

基本コマンド

既存の Cron ジョブの一覧表示

以下のコマンドを使用して、crontab 構成ファイルを開かずに、すべての Cron ジョブを一覧表示できます。

 crontab -l

既存のジョブがない場合、出力は次のように返されます。

 [geekflare@localhost ~]# crontab -l no crontab for geekflare [geekflare@localhost ~]#

ユーザーがすでにいくつかのジョブを追加している場合は、次のように表示されます。

 [geekflare@localhost ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 am every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # mh dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [geekflare@localhost ~]#

cron テーブルはユーザー固有です。つまり、cron テーブル リストを表示するには、特定のユーザーでログインする必要があります。

特定のユーザーの Cron を一覧表示する

別のユーザーのスケジュールされたジョブを一覧表示するには、オプションを-u ( User ) および-l ( List ) として使用します。

crontab -u another_username -l

crontab -u geekflare -l

Crontab エントリの追加/変更

crontab エントリを編集するには、以下に示すように-eオプションを使用できます。

crontab -e

上記のコマンドは、ジョブの詳細を指定してファイルを保存する vi エディターを開きます。 保存したら、 crontab -lで cron が構成されているかどうかを確認できます。

特定のユーザーの Crontab エントリを追加/変更する

以下のコマンドを使用して、別のユーザーの crontab を編集できます

crontab -u another_username -e

crontab -u geekflare -e

Crontab エントリの削除

Crontab で<strong>-r</strong>パラメータを使用して、crontab からの確認なしで完全なスケジュール済みジョブを削除します

crontab -r

スケジュールされたジョブを削除する前に確認が必要な場合は、 <strong>-i</strong>オプションを-rと共に使用します。これにより、ユーザーの crontab を削除する前にユーザーに確認を求めます。

 crontab -i -r
 [geekflare@localhost ~]# crontab -i -r crontab: really delete geekflare's crontab?

Crontab 特殊文字列

説明した上記の構文以外に、Crontab が提供する 8 つの特別な文字列を使用することもできます。 時間を節約するだけでなく、読みやすさも向上します。

特殊文字列説明
@reboot 起動後に一度実行します。
@yearly 1 年に 1 回実行、つまり0 0 1 1 *
@annually @yearlyと同じ
@monthly 月に 1 回実行、つまり0 0 1 * *
@weekly 週に 1 回実行、つまり0 0 * * 0
@daily 1 日に 1 回実行、つまり0 0 * * *
@midnight @dailyと同じ
@hourly 1 時間に 1 回実行、つまり0 * * * *

Crontab 特殊文字列の例

1. 年単位でタスクをスケジュールする Crontab

@yearly /scripts/greeting.sh

新年の挨拶を送信するために上記を実行できます。これは、毎年最初の 1 分に実行されます。

2. crontab を使用して、毎月実行するタスクをスケジュールします。

@monthly /scripts/cleanup.sh

上記を実行して、毎月初めにいくつかのクリーンアップ アクティビティを実行できます。

同様に、週ごと、日ごと、および時間ごとの目的で、他の Crontab 特殊文字列を使用できます。

Cron ディレクトリ

システム管理者は、以下に示すように、事前定義された cron ディレクトリの下にあるシステム全体の cron スケジュールを使用できます。

  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly
  • /etc/cron.weekly

Crontab リアルタイムの例

システム管理者または IT プロフェッショナルが通常使用するリアルタイムの例をいくつか説明しましょう。

空のファイルとディレクトリを削除する

45 0 * * * geekflare find /tmp -type f -empty -delete

上記の cron 式は、 /tmpディレクトリから空のファイルとディレクトリを検索し、それらを削除します。 このジョブは、毎日午前12 時 45 分に実行されます。 このジョブを実行するには、ユーザー名を指定する必要があります。 上記の例では、 geekflareユーザーが cron ジョブ操作を実行しています。

単一の cron を使用して複数のタスクを実行する

* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh

複数のタスク/ジョブは、セミコロン ( ; ) を使用して区切ることができ、単一の cron 式に割り当てることができます。

Cron のフォーマットとテスト ツール

これまで、タスクをスケジュールするための crontab のコマンドと構文について説明してきました。 しかし、あなたがシステム管理者ではなく、Cron を定期的にセットアップすることが仕事ではない場合、構文を覚えることができず、エラーの余地が生じる可能性があります。 この問題の解決策があることを心配しないでください。

オンラインで利用できる Cron フォーマット ツールがいくつかあります。

# 1. Cron ジョブ ジェネレーター

Cron Job Generator は非常に使いやすい GUI であり、crontab を生成するスクリプトの分、日、およびパスを指定できます。

月曜日から金曜日まで 5 分ごとに/home/processMonitor.shを実行する必要があるリアルタイムの例を見てみましょう。

したがって、実行してcrontabに入れることができる以下のCron構文を取得しました

crontab –e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2.イージークロン

Easycron は、便利な Web ベースの cron ジョブ スケジューラです。 呼び出す URL を指定して cron ジョブを作成し、実行する時間を設定できます。 cron 式を指定するか、説明フォームから手動で追加することもできます。 重要なことは、オプションで基本的な HTTP 認証を使用して、小さなセキュリティ層を確保できることです。

これだけでなく、Easycron を使用して、標準 Cron 式、Cron ジョブ実行ログ、電子メール通知、個別の障害ログなどの他の目的を達成することもできます。

# 3. Crontab ジェネレーター

Crontab ジェネレーターは、crontab を生成するもう 1 つの便利なツールです。このツールを使用すると、cron 出力をファイルに保存したり、電子メールで送信したりする場合に追加することもできます。

# 4.クロンタブグル

Crontab Guru は、単純なオンライン cron スケジュール式エディターです。 さらに、cron ジョブを監視する便利な手段を提供します。 必要なのは、提供されたコマンドをコピーして、crontab 定義の最後に追加することだけです。 cron ジョブが失敗したり、開始さえしない場合は、アラート メールが届きます。

以下の例では、ジョブは毎日、毎月、毎週04:05に実行されます。

# 5.CRONテスター

CRON Tester を使用すると、cron の時刻/日付の定義をテストできます。 トラブルシューティングのために既存の cron 構文をデコードする必要がある場合や、単にテストを実行したい場合があります。

そのために、このツールを使用できます。 必要なのは、cron 式をコピーして cron 定義フィールドに貼り付け、反復回数を選択し、[テスト] をクリックして、実行されるさまざまな日付を確認することだけです。

2 日おきに03:04(AM)に実行される cron 式4 3 */2 * *の 1 つを確認してみましょう。 cronテスターで検証してみましょう。

結論

上記が、Crontab と cron ジョブの設定についての理解を深めるのに役立つことを願っています。 Cron によるジョブのスケジューリングは、Linux 管理者によって実行される多くのタスクの 1 つです。 高度なスキルの習得に興味がある場合は、このコースをチェックしてください。