我以ec2用户的身份登录到我的AWS服务器,但我试图让所有内容都以root用户的身份运行,所以我用sudo crontab -e
命令管理我的crontab。这就是其中的内容:
* * * * * php /var/www/html/a*****/cron/cron.php
* * * * * php /var/www/html/d*****/cron/cron.php
* * * * * /usr/bin/php -f /var/www/html/k*****/cron/cron.php
* * * * * php /var/www/html/l*****/cron/cron.php
/var/www/html/k*****/cron/cron.php
脚本如下所示:
<?php
include_once('../functions.php');
date_default_timezone_set("UTC");
// ==============================================
$content = file_get_contents("output.txt");
file_put_contents("output.txt", date('j M Y 'a't g:ia').
"'n'n---------------------'n".$content);
// ==============================================
performScheduledJobs();
sudo crontab -e
视图中的其他cron.php
文件看起来都相同,除了// =====
标记之间没有位。
由于这些脚本应该每分钟运行一次(根据sudo crontab -e
设置,带有五个间隔的星号标记* * * * *
),我希望output.txt
每分钟打印一次当前时间戳(UTC)。相反,它只包含每次使用以下命令手动运行脚本时的(UTC)时间戳:
sudo php cron.php
该命令(当然来自/var/www/html/k*****/cron/
目录)100%成功。
当然,我的直觉是cron.php
文件甚至没有被尝试运行,但当我sudo vi /var/log/cron
时,我看到以下内容:
Mar 27 21:51:01 ip-172-***-***-184 CROND[32032]: (root) CMD (php /var/www/html/a*****/cron/cron.php)
Mar 27 21:51:01 ip-172-***-***-184 CROND[32033]: (root) CMD (php /var/www/html/d*****/cron/cron.php)
Mar 27 21:51:01 ip-172-***-***-184 CROND[32035]: (root) CMD (/usr/bin/php -f /var/www/html/k*****/cron/cron.php)
Mar 27 21:51:01 ip-172-***-***-184 CROND[32034]: (root) CMD (php /var/www/html/l*****/cron/cron.php)
正如我所说的,运行sudo php cron.php
命令是有效的,所以无论哪里出了问题,都可能是我的crontab配置出了问题。
有人有什么想法吗?
php在crond中运行时不在路径中。您需要指定php可执行文件的完整路径。你可以通过运行which php
找到这是什么
这应该输出运行php cron.php
时调用的php二进制文件的完整路径,它将类似于/usr/bin/php
。如果在crontab中用它替换php
,它应该运行良好。