LinuxでのCronタイミング実行プログラム

3619 ワード

cron基本知識名詞解釈
cronはサービス名、crondはバックグラウンドプロセス、crontabはカスタマイズされた計画タスクテーブルです.
プロファイルディレクトリ:cd/etc/cron.d
ログファイルディレクトリ:vim/var/log/cron
/sbin/service crond start //      
/sbin/service crond stop //      
/sbin/service crond restart //      
/sbin/service crond reload //      

プロファイルの基本フォーマット
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

分(0-59)時間(0-23)日付(1-31)月(1-12)曜日(0-6、0は日曜日)コマンド
1列目は分1~59毎分*または*/1で表示
第2列表示時間1~23(0は0点)
第3列は日付1~31を示す
4列目は月1~12
第5列表示番号曜日0~6(0は日曜日)
6列目実行するコマンド
上記の任意の値では、アスタリスク(*)はすべての有効な値を表すために使用できます.たとえば、月の値の星は、他の制約条件を満たした後、毎月このコマンドを実行することを意味します.
整数間の短い線(-)は、整数の範囲を指定します.例えば、1〜4は整数1、2、3、4を意味する.
カンマ(,)で区切られた一連の値でリストを指定します.例えば、3,4,6,8は、この4つの指定された整数を示す.
正斜線(/)は、間隔周波数を指定するために使用できます.範囲の後に/を加えると、範囲内でintegerをスキップできることを意味します.例えば、0〜59/2は、分フィールドで2分ごとに定義するために使用され得る.間隔周波数値は、アスタリスクとともに使用することもできます.たとえば、*/3の値は、3ヶ月ごとにタスクを実行する月フィールドで使用できます.
井戸番号(#)で始まる行はコメントで、処理されません.
サンプル
0 1 * * * root /home/testuser/test.sh
    1   /home/testuser/test.sh

*/10 * * * * root /home/testuser/test.sh
 10     /home/testuser/test.sh
30 21 * * * root /usr/local/etc/rc.d/lighttpd restart
          21:30  apache。

45 4 1,10,22 * * root /usr/local/etc/rc.d/lighttpd restart
         1、10、22  4 : 45  apache。

10 1 * * 6,0 root /usr/local/etc/rc.d/lighttpd restart
          、   1 : 10  apache。

0,30 18-23 * * * root /usr/local/etc/rc.d/lighttpd restart
          18 : 00 23 : 00    30    apache。

0 23 * * 6 root /usr/local/etc/rc.d/lighttpd restart
            11 : 00 pm  apache。

0 */1 * * * root /usr/local/etc/rc.d/lighttpd restart
      apache

* 23-7/1 * * * root /usr/local/etc/rc.d/lighttpd restart
  11    7   ,       apache

0 11 4 * mon-wed root /usr/local/etc/rc.d/lighttpd restart
   4         11   apache

0 4 1 jan * root /usr/local/etc/rc.d/lighttpd restart
     4   apache

*/30 * * * * root /usr/sbin/ntpdate 210.72.145.44
          

時間キャリブレーションの設定
/etc/cron.d下にプロファイルntpdate_を追加cron
内容は以下の通り
MAILTO=""
#for ntpdate
*/1 * * * * root /usr/sbin/ntpdate timeserverip

タイミング実行失敗の原因
第一に、スクリプトの原因:多くの場合、私たちは科学を信じて、コンピュータを信じて、幽霊ではありませんて、私たちのスクリプトの問題で、このような問題はcrontabが実行できない確率を70%以上占めます.プログラムが実行されるとcrontabが実行を終了するため、コードを移行するときにデータベースを接続し間違えたことに遭遇しました.そこに訪問できずに死んだ.第二に、実行環境の問題は、私たちが第一の状況に遭遇した場合、一般的に手動でプログラムを実行することで問題を揺りかごの中で殺すことができ、一般的には達人は第一の間違いを犯すべきではない.問題は,我々が手動で実行に成功しcrontabが実行できない場合,筆者が一度遭遇したのは実行環境の問題,例えば関連経路の設定の問題である.解決策:コードの一番前にsource/home/user/.bash_profile第三に、システム時間が正しくありません.この問題はよくある問題であり、隠蔽的な問題でもあることを理解したほうがいい.解決策:date-s************第四に、私たちのスクリプトに実行可能な権限があるかどうかである.スクリプトを実行するユーザーには、ファイルの変更を実行する権限があることを保証する必要があります.第五に、crontabの守護プロセスが死んだ.このような状況はめったに発生しませんが、私たちが本当に他の原因が見つからないときに使うことができます.ソリューション:プロセスを再起動します.第六に、crontabが実行しない問題は長い間困っていて、スクリプトの書くのはすべて正しいですが、実行しないで、最終的な解決方法は以下の通りです:crontab-u root/var/spool/cron/rootこのようにrootユーザーのcrontabはservice crond restartが再起動してサービスを再開すればいい第七に、crondは第八を起動していません.スクリプトコードの問題、スクリプトはwindowの下で編纂して、linuxの下に伝わって“锘?!/bin/bash”を報告して、viエディタで新しいshellスクリプトを新築して、内容を入力して保存します.
に注意
1環境変数は自分でロードする必要があり、プログラムが実行されていない場合は必要な環境変数が欠けている可能性が高いことを考えなければならない.
2 cronのプロファイルは最後に1>/dev/null 2>&1を加えて標準出力と標準エラー出力をリダイレクトすることが望ましい