0

crontab に以下を追加しました。30分ごとによく走っています。cron が数分以内に終了するたびに電子メールが送信され、3 分以上かかる場合は送信されないという奇妙なことが 1 つあります。そのような制限はありますか?ジョブが終了するまで待機し、プロセスが出力するテキスト全体を送信するように crontab に指示する方法はありますか?

MAILTO=notifs@mydevdomain.com
0,30 * * * * /usr/bin/php /var/www/z/process_batch.php
4

2 に答える 2

1

通常、cron はすべての出力をリダイレクトして収集し、ジョブが終了すると、出力は MAILTO にあるものに送信されます。そして、それはこれがどれだけ時間がかかるかにかかわらずです.

ここでの問題は通常次のとおりです。

ジョブの実行に 30 分 (間隔) 以上かかり、cron がバッチの 2 番目のインスタンスを開始しています。それに対処する必要があります。

ジョブは決して終了せず、ハングします。これにより、システム内で一部のゾンビ プロセスが発生する可能性があり、特定の状況では、cron が正常に動作しなくなる可能性もあります。

そのため、ジョブが 3 分以上実行されていて、実際に終了した後、cron から電子メールが送信されない場合、cron の問題ではなく、単にバッチ php に関連しているようです。

于 2013-06-08T12:39:33.480 に答える
1

いくつかのヒントとして:

-------------%<--------------------
...
# name of the task, param 1
export LOCKEXT=$1; shift
export LOCK=/tmp/cron_lock.$LOCKEXT
...

# catch on external signals
trap "rm $LOCK" 10 11 15

...

if [ -f $LOCK ]
then
    echo "`date`: still running: `ls -l $LOCK` ...."
    exit 0
else
    touch $LOCK
fi

.....
# run your task
....

rm -f $LOCK

-------------->%------------------
于 2013-06-08T17:04:38.373 に答える