Cron执行的Bash脚本中的PHP脚本序列未运行
我有四个
PHP脚本,执行需要按顺序执行的各种任务.
而不是为每个PHP脚本创建一个cron条目,我认为我会聪明并将其包装为Bash脚本,如下所示: #!/bin/bash # set notification email. NOTIFYEMAIL="webmaster@example.com" # set PHP path. PHP="$(which php)" # set folder path. FOLDER="/var/www/example.com/processors/" # list of scripts. SCRIPTS=("script_1" "script_2" "script_3" "script_4") # execute each script. for i in "${SCRIPTS[@]}" do SCRIPT="$FOLDER/$i.php" printf "Processing: %sn" $i chmod +x $SCRIPT $PHP $SCRIPT done echo "Scripts have been processed." | mail -s "Scripts Processed" $NOTIFYEMAIL 我已经单独测试了所有脚本,并且它们正常工作,将处理信息输出到终端. /usr/bin/php /var/www/example.com/processors/script_1.php 我甚至测试了bash脚本,该脚本按顺序调用四个PHP脚本,通过终端手动调用,也可以正常工作. /bin/bash /var/www/example.com/processors/run.sh 但由于某种原因,当我离开cron在root用户crontab上使用以下命令运行它们时,PHP脚本不会执行. # process daily. 0 1 * * * /bin/bash /var/www/example.com/processors/run.sh > /dev/null 我知道crontab已被处理并且Bash脚本已经运行,因为我总是在脚本结束时每次都收到通知电子邮件. 权限如下: -rwxr-xr-x 1 root root 510 Mar 11 09:21 run.sh -rwxrwxr-x 1 git git 2.8K Mar 8 10:17 script_1.php -rwxrwxr-x 1 git git 2.6K Mar 1 18:07 script_2.php -rwxrwxr-x 1 git git 717 Mar 1 18:07 script_3.php -rwxrwxr-x 1 git git 6.8K Mar 4 16:30 script_4.php 没有特定于cron的日志文件,例如/var/log/cron.log,但是当我运行grep CRON / var / log / syslog并返回以下通用输出时: Mar 11 06:39:01 s00000000 CRON[11651]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null ; -delete) Mar 11 07:09:01 s00000000 CRON[12771]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null ; -delete) Mar 11 07:17:01 s00000000 CRON[13074]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) 任何建议让我尝试的将不胜感激. 解决方法
初步
>检查在crontab中是否正确设置了SHELL和PATH的值,例如: SHELL=/bin/bash PATH=/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/local/sbin:/usr/sbin >确保真正使用了预期的shell(例如bash). >检查crontab中是否没有未转义的%.有关详细信息,请参阅man 5 crontab. MAILTO="webmaster@example.com" 确保您的crontab正常工作 确保您的crontab被正确解析的另一个小技巧是在末尾添加一个标记条目. 我正在使用这个标记条目
如果syslog中缺少标记条目,则表示crontab已损坏.这可能是由您未见过的一些奇怪的语法错误引发的. 如何调试cron作业 如果一个cron作业无法正常工作,请首先调查作业输出. 将您的crontab更改为: 0 1 * * * /bin/bash -x /var/www/example.com/processors/run.sh >>/tmp/cronTrace 2>&1 请调查生成的脚本输出以及跟踪输出(bash -x). 附加说明 chmod x $SCRIPT chmod步骤不是必需的,应该避免.在下一行中,您通过显式使用interpreter命令来调用脚本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |