我有一个每五分钟运行一次的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'语句。在手动模式下,它可以完成所有工作。
有什么想法吗?
非常感谢!
答案 0 :(得分:0)
我在PHP脚本中发现了这个问题。当自动运行时,对位于其他路径中的文件的相对调用会被遗漏。显然,它从其他地方运行,因此由于缺少初始php脚本创建的输入文件而无法进展。
感谢。
答案 1 :(得分:0)
在bash中手动运行和cron运行之间的区别在于,在cron的情况下,.bash *文件最初不是来源的,因此可能会发生一些必需的设置(例如:PATH)不同。
而且,(回复你之前的评论)如果是cron,PWD是$ HOME,所以你提到的所需文件不会被选中,而在手动运行的情况下,它会从你运行的路径中选择。 / p>
希望这有帮助。