English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Linux crontabは定期的にプログラムを実行するために使用されるコマンドです。
オペレーティングシステムをインストールした後、デフォルトでこのタスクスケジューラコマンドが起動されます。
crondコマンドは毎分、実行する必要がある作業があるかどうかを定期的にチェックし、作業がある場合は自動的にその作業を実行します。
注意:新しいcronタスクはすぐに実行されません。少なくとも 2 分後に実行可能になります。もちろん、cronを再起動してすぐに実行することもできます。
Linuxのタスクスケジューラの作業は主に以下の2つのカテゴリに分けられます:
crontab [ -u user ] ファイル
または
crontab [ -u user ] { -l | -r | -e }
説明:
crontabは、ユーザーが特定の時間や一定の間隔でプログラムを実行するために使用されます。別の言い方をすると、ユーザーの時程表に似ています。
-u userは、指定されたユーザーの時程表を設定することを指します。この前提条件として、他者の時程表を指定するにはそのユーザーの権限が必要です(例えばroot)。u userを使用しない場合 -u userの場合、自分自身の時程表を設定することを意味します。
パラメータ説明:
時間フォーマットは以下の通りです:
f1 f2 f3 f4 f5 program
* * * * * - - - - - | | | | | | | | | +----- 週の中の何曜日(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