0

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

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

2 回答 2

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 回答
1

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

这里的问题通常是:

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

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

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

于 2013-06-08T12:39:33.480 回答