【发布时间】:2013-02-26 10:11:24
【问题描述】:
我有四个 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: %s\n" $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
我什至测试了通过终端手动依次调用四个 PHP 脚本的 bash 脚本,它也可以正常工作。
/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)
如有任何建议让我尝试,我们将不胜感激。
【问题讨论】:
-
run.sh 的 chown/chmod 权限如何? PS:可能是serverfault.com的问题
root能够/允许执行run.sh/script_1.php吗? -
... 和
php脚本本身?您是否有通过控制台对 test-run/bin/bash /var/www/example.com/processors/run.sh进行 root 访问? -
root 应该有权运行所有内容吗?
-
@simplyray 我已经更新了这些文件的权限。我使用 Git 和
chmod +x在 Bash 脚本中的文件上部署站点。 -
@paperclip: 嗯好吧...
/var/log下的 crontab 的任何错误日志条目?