【问题标题】:bash file: cronjob vs manual, why are they different?bash 文件:cronjob 与手动,为什么它们不同?
【发布时间】:2015-03-16 12:44:44
【问题描述】:

我有一个每五分钟运行一次的 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”语句。在手动模式下,它什么都做。

有什么想法吗?

非常感谢!

【问题讨论】:

  • 你的意思是“它永远不会到达'do'语句”?它在最初的php 通话中挂起?你怎么知道?我假设您永远不会在 cron 日志中看到 search completed 或其他什么?如果将set -x 添加到脚本中,当 cron 运行时会得到什么? php 是否在默认的 $PATH 位置,以便 cron 可以找到它?你看过crontab wiki 上的调试建议吗?

标签: bash cron crontab


【解决方案1】:

我在 PHP 脚本中发现了问题。自动运行时会错过对位于其他路径中的文件的相对调用。显然,它是从其他地方运行的,因此由于初始 php 脚本创建的输入文件丢失,它无法继续进行。

谢谢。

【讨论】:

  • Cron 作业在您的主目录中运行。
【解决方案2】:

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2017-12-01
    • 2015-10-19
    • 2020-10-14
    相关资源
    最近更新 更多