English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Linux crontabコマンド

Linux コマンド全書

Linux crontabは定期的にプログラムを実行するために使用されるコマンドです。

オペレーティングシステムをインストールした後、デフォルトでこのタスクスケジューラコマンドが起動されます。

crondコマンドは毎分、実行する必要がある作業があるかどうかを定期的にチェックし、作業がある場合は自動的にその作業を実行します。

注意:新しいcronタスクはすぐに実行されません。少なくとも 2 分後に実行可能になります。もちろん、cronを再起動してすぐに実行することもできます。

Linuxのタスクスケジューラの作業は主に以下の2つのカテゴリに分けられます:

  • 1、システムの作業:システムが定期的に実行する作業、例えばシステムデータのバックアップ、キャッシュのクリーンアップ
  • 2、個別のユーザーの作業:特定のユーザーが定期的に行う作業、例えば每隔10メールサーバーに新しいメールが届くかを確認する分の分の確認、これらの作業は各ユーザーが自分で設定できます

文法

crontab [ -u user ] ファイル

または

crontab [ -u user ] { -l | -r | -e }

説明:

crontabは、ユーザーが特定の時間や一定の間隔でプログラムを実行するために使用されます。別の言い方をすると、ユーザーの時程表に似ています。

-u userは、指定されたユーザーの時程表を設定することを指します。この前提条件として、他者の時程表を指定するにはそのユーザーの権限が必要です(例えばroot)。u userを使用しない場合 -u userの場合、自分自身の時程表を設定することを意味します。

パラメータ説明:

  • -e : 時程表を設定するためのテキストエディタを実行します。デフォルトのテキストエディタはVIです。他のテキストエディタを使用したい場合は、まずVISUAL環境変数を設定してそのテキストエディタを使用するように指定してください(例:setenv VISUAL joe)
  • -r:現在のスケジュールを削除
  • -l:現在のスケジュールを表示

時間フォーマットは以下の通りです:

f1 f2 f3 f4 f5 program
  • の中で f1 は分を表します、f2 は時間を表します、f3 は月の何日目を表します、f4 は月を表します、f5 は週の何日目を表します。programは実行するプログラムを表します。
  • fの時1 は * の時は毎分programを実行することを意味し、f2 は * の時は毎時間実行することを意味し、それ以外も同様です
  • fの時1 aの時-bの時はa分からb分までの時間帯に実行することを意味し、f2 aの時-bの時はaからbまでの時間帯に実行することを意味し、それ以外も同様です
  • fの時1 は */nの時はn分ごとの時間間隔で実行することを意味し、f2 は */nはn時間ごとの時間間隔で実行することを意味し、それ以外も同様です
  • fの時1 a、b、c...の時はa、b、c...分に実行することを意味し、f2 a、b、c...の時はa、b、c...時間に実行することを意味し、それ以外も同様です
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 週の中の何曜日(0 - 6)(日曜日が0)
|    |    |    +---------- 月(1 - 12) 
|    |    +--------------- 月の何日目(1 - 31)
|    +-------------------- 時間(0 - 23)
+------------------------- 分(0 - 59)

ユーザーはすべての設定をまずファイルに保存し、crontab fileの方法で実行時間を設定することもできます。

オンラインの例

毎分実行 /bin/ls:

* * * * * /bin/ls

において 12 月内、毎日の朝 6 時から 12 時、毎隔 3 時間0分に一度実行 /usr/bin/backup:

0 6-12/3 * 12 * /usr/bin/backup

月曜日から金曜日までの毎日午後 5:00に[email protected]に一封の手紙を送信:

0 17 * * 1-5 mail -s "hi" [email protected] < /tmp/maildata

毎月毎日の真夜中0時 20分, 2 点 20分, 4 点 20分....実行 echo "haha":

20 0-23/2 * * * echo "haha"

いくつかの具体的な例を見てみましょう:

0 */2 * * * /sbin/service httpd restartは毎2時間に一度apacheを再起動することを意味しています 
50 7 * * * /sbin/service sshd startは毎日実行することを意味しています7:50でsshサービスを開始 
50 22 * * * /sbin/service sshd stopは毎日実行することを意味しています22:50でsshサービスを停止 
0 0 1,15 * * fsck /ホーム:毎月1番と15番チェック/ホームディスク 
1 * * * * /home/bruce/バックアップ:毎時間の最初の分に実行 /home/bruce/backup このファイル 
00 03 * * 1-5 find /home "*、xxx" -mtime +4 -exec rm {} \;  毎週月曜日から金曜日まで3時刻、ディレクトリ/home ディレクトリ内で、ファイル名が*、xxxのファイルを削除します。4日前のファイルです。
30 6 */10 * * ls  意味して、毎月の1、11、21、31日是的6:30 1 * * * ls コマンドを実行します

注意:プログラムが指定された時間に実行された後、システムは現在のユーザーにメールを送信し、プログラムの実行内容を表示します。このようなメールを受け取りたくない場合は、各行の後ろに一つのスペースを追加して「>」を付けます。 /dev/null 2>&1 です。例えば:

20 03 * * * . /etc/profile;/bin/sh /var/www/w3codebox/test.sh > /dev/null 2>&1 

スクリプトが実行できない問題

スクリプトを crontab でタイムスタンプして実行しようとしても実行できない場合がありますが、直接コマンド(例えば:./test.sh)が正常に実行できるようになったのは、環境変数が読み込めなかったためです。

解決策:

  • 1、すべてのコマンドは絶対パス形式で書かれる必要があります。例えば: /usr/local/bin/docker。

  • 2、シェルスクリプトの先頭に以下のコードを使用します:

    #!/bin/sh
    . /etc/profile
    . ~/.bash_profile

    3、以下に /etc/crontab 環境変数を追加するために以下に追加します。実行可能なコマンドの前に追加します。 . /etc/profile;/bin/sh、環境変数が有効になるようにします。例えば:

    20 03 * * * . /etc/profile;/bin/sh /var/www/w3codebox/test.sh

    Linux コマンド全書