我可以从 CLI 运行此命令,在 Fedora 机器上没有问题,但不能从 Cron 运行:
/usr/bin/php /var/www/support_web/api/cron.php
这是 cron 输出:
命令 /usr/bin/php /var/www/support_web/api/cron.php 的输出..
77
文件具有执行权限。
Crontab 日志:
Jun 11 11:46:20 www crontab[23453]: (root) BEGIN EDIT (root)
Jun 11 11:46:21 www crontab[23453]: (root) REPLACE (root)
Jun 11 11:46:21 www crontab[23453]: (root) END EDIT (root)
Jun 11 11:47:01 www crond[2479]: (*system*) WRONG FILE OWNER (/etc/crontab)
Jun 11 11:47:01 www crond[2479]: (*system*) WRONG FILE OWNER (/etc/cron.d/smolt)
Jun 11 11:47:01 www crond[2479]: (root) RELOAD (cron/root)
答案1
您是否使用同一用户从 CLI 和 cron 运行它?如果您以普通用户身份从 CLI 运行它,并以 root 用户身份从 cron 运行它,root 可能缺少 cron.php 所需的某些环境变量。
您可以尝试从 root cron 运行以下命令:
su - userToRunAs -c "/usr/bin/php /var/www/support_web/api/cron.php"
答案2
cron 文件必须具有 root/root 的用户/组(/etc/cron* 和 /etc/cron.{daily,hourly,etc}/* 必须由 root 拥有,否则其中的脚本将不会启动。
我不知道 /var/spool/cron/$username 下的个人 crontab。不过,我的个人经验表明它是 root/“用户组”
还有一些权限要求,但我不知道这些要求是什么。不过我知道 755 可以工作。
答案3
很难确切地说,但它可能是您在交互式 shell 中设置的环境变量,但 cron 并未设置该变量。在 cron.php 中放入一些打印语句,打印出任何依赖的环境变量,这样您就可以查看它是否已正确设置。
如果失败,请添加更多打印语句来查看发生了什么。
答案4
例如,如果脚本位于cron.daily
文件自动执行的目录中,则某些实现cron
始终使用 运行它们,而sh
不管 shebang 是什么。尝试创建简单的sh
脚本,只需调用 即可/usr/bin/php /var/www/support_web/api/cron.php
。