web-dev-qa-db-ja.com

24時間ごとにcronを実行し、すぐに開始する

pythonのスクリプトを24時間ごと、23:59:58ごとに実行したい。ジョブを終了したい。実行したいpythonしたがって、私はこの構文を次のように使用します

* */24 * * * cd /ftp/ftp1 && timeout -s 9 86398 python2.6 lpr_10.10.252.121.py 10.10.252.121 450 >> res_10.10.252.121.txt

しかし、cronログでは、スクリプトは実行されていません。 /etc/rc.d/init.d/crond restart

ここにログcronがあります

May 18 10:13:45 Cisco-cumc crontab[31368]: (root) REPLACE (root)
May 18 10:13:45 Cisco-cumc crontab[31368]: (root) END EDIT (root)
May 18 10:14:01 Cisco-cumc crond[5090]: (root) RELOAD (/var/spool/cron/root)
May 18 10:15:24 Cisco-cumc crontab[31449]: (root) BEGIN EDIT (root)
May 18 10:15:42 Cisco-cumc crontab[31449]: (root) REPLACE (root)
May 18 10:15:42 Cisco-cumc crontab[31449]: (root) END EDIT (root)
May 18 10:15:46 Cisco-cumc crontab[31451]: (root) LIST (root)
May 18 10:15:57 Cisco-cumc crond[5090]: (CRON) INFO (Shutting down)
May 18 10:15:57 Cisco-cumc crond[31471]: (CRON) STARTUP (1.4.4)
May 18 10:15:57 Cisco-cumc crond[31471]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 73% if used.)
May 18 10:15:57 Cisco-cumc crond[31471]: (CRON) INFO (running with inotify support)
May 18 10:15:57 Cisco-cumc crond[31471]: (CRON) INFO (@reboot jobs will be run at computer's startup.)

試しましたps -ax | grep python

いいえpythonスクリプト実行中

では、24時間ごとにスクリプトを実行してすぐに開始するにはどうすればよいでしょうか。 CentOS 6.4で実行しているマシン

1
Yohanes AI

あなたはこれについて間違っています。 cronは、既知の将来の時間に無人でジョブを開始するように設計されています。それらをすぐに開始するようには設計されておらず、停止するようにも設計されていません。本来想定されていないことをするためにツールを拷問すると、今のように混乱する可能性があります。

シャットダウンをジョブに任せましょう。のようなものを考えてください

#!/bin/bash
cd /ftp/ftp1
let pause=86400+`date +%s -d 0000`-`date +%s`-10
python2.6 lpr_10.10.252.121.py 10.10.252.121 450 >> res_10.10.252.121.txt &
sleep $pause
kill -15 %1
exit 0

この小さなシェルスクリプトは、現在から翌深夜までの残りの秒数から10秒を引いたものを計算します(私はほぼ間違いなくもっとエレガントにそれを実行できたでしょうc'est la vie)。次に、バックグラウンドでpythonジョブを開始し、その秒数だけスリープ状態になるため、23:59:50にウェイクアップし、バックグラウンドジョブを強制終了して終了します。より専門的なアプローチの場合ジョブは、起動時に別のコピーが実行されているかどうかもチェックし、実行されている場合は(監視システムへのエラーにより)終了します。

一日の真夜中にcrononceから安全に開始できます。

0 0 * * *  /usr/local/bin/noddy-printer-script

それに応じてスリープギャップを調整するため、シェルからすぐに起動することもできます。

Nikhil_CVは上記の良い点を示していることに注意してください。 */2425までの毎時を意味するのではなく、代わりに時が0または24の場合を意味します。後者は決して発生しないため、-時= 0の場合のみ、これがジョブが午前10時に実行されない理由です。次の真夜中に来ると、cronは次の1時間を費やしてジョブのコピーを1分ごとに開始しますが、これはおそらく望んでいないことです。また、CentOS 6のボックスは パッチが不足していて脆弱である であり、C6に上げる必要があります。すぐに9。

5
MadHatter