当作业需要很长时间才能完成时,Cron通知不会被发送

时间:2013-06-08 12:23:29

标签: cron crontab

我已将以下内容添加到crontab中。它每30分钟运行一次。我观察到一件奇怪的事情,即每当cron在几分钟内完成时发送电子邮件,而不是在需要3分钟+时发送。有这样的限制吗?有没有办法告诉crontab等到作业完成并发出过程输出的整个文本?

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

2 个答案:

答案 0 :(得分:1)

通常,cron将重定向所有输出并收集它,并在作业完成后,输出get被发送到MAILTO中的内容。不管这可能需要多长时间。

这里的问题通常是:

该作业需要超过30分钟(您的间隔)才能运行,而cron正在启动您的批次的第二个实例。你需要处理它。

作业永远不会完成并挂起,这可能会导致系统中的某些僵尸进程,并且在某些情况下也可能阻止cron正常工作。

因此,如果作业运行时间超过3分钟并且实际完成后,cron没有发送任何电子邮件似乎不是cron问题,而只是与您的批处理php有关。

答案 1 :(得分: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

-------------->%------------------