我已将以下内容添加到crontab中。它每30分钟运行一次。我观察到一件奇怪的事情,即每当cron在几分钟内完成时发送电子邮件,而不是在需要3分钟+时发送。有这样的限制吗?有没有办法告诉crontab等到作业完成并发出过程输出的整个文本?
MAILTO=notifs@mydevdomain.com
0,30 * * * * /usr/bin/php /var/www/z/process_batch.php
答案 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
-------------->%------------------