bash文件:cronjob vs manual,为什么它们不同?

时间:2015-03-16 12:44:45

标签: bash cron crontab

我有一个每五分钟运行一次的bash脚本。除此之外,它运行PHP脚本阅读现有文件,最后它发送电子邮件。手动运行时,它可以完成工作。当cronjob运行时,它部分完成任务。以下代码:

DIR="/somedir/" 
php ${DIR}client.php $DIR  
cat ${DIR}alert_list.txt | uniq | while read alert; 
do  
   if [ -s ${DIR}alerts/$alert.txt ]; then
        # send the email.           
        echo "Sending email for..."$alert >> ${DIR}email.txt    
        DETAILFILE="tools/"$alert
        DETAILFILEP=${DETAILFILE}".txt"             
        php ${DIR}email.php $alert  
   fi 
done 
echo 'search completed.'

在'cronjob模式'中它永远不会进入'do'语句。在手动模式下,它可以完成所有工作。

有什么想法吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我在PHP脚本中发现了这个问题。当自动运行时,对位于其他路径中的文件的相对调用会被遗漏。显然,它从其他地方运行,因此由于缺少初始php脚本创建的输入文件而无法进展。

感谢。

答案 1 :(得分:0)

在bash中手动运行和cron运行之间的区别在于,在cron的情况下,.bash *文件最初不是来源的,因此可能会发生一些必需的设置(例如:PATH)不同。

而且,(回复你之前的评论)如果是cron,PWD是$ HOME,所以你提到的所需文件不会被选中,而在手动运行的情况下,它会从你运行的路径中选择。 / p>

希望这有帮助。