我的服务器运行在 Ubuntu 和 nginx 上。我的问题涉及克罗恩,我想使用文件启动它(crontab)-计划任务文件,其内容:
* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
如果我使用命令运行它:crontab /var/www/html/cron.txt
,它完美地运行,脚本测试.php正在执行。但是当我使用 PHP 脚本(通过浏览器执行)执行相同操作时exec('crontab /var/www/html/cron.txt');
,它不起作用。
通过命令检查当前 cronjob:,crontab -l -u www-data
文件中的行出现了,但 Cron 并没有执行其工作。也许这与某些权限问题有关?因为它只能以 root 身份执行。有没有办法强制 Cron 也执行 www-data 的任务?
答案1
请使用/etc/crontab
。执行 cron 作业的这种方法允许您向任务添加用户名。它看起来如下:
* * * * * www-data /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
您可以执行此操作nano /etc/crontab
并将该行添加到文件中。
但是当我执行相同操作但使用 PHP 脚本(通过浏览器执行)时:exec('crontab /var/www/html/cron.txt');,它不起作用。
如果这不起作用,那么除了“crontab”用法之外,您可能还遇到了其他问题。例如:您不需要重定向吗?(即> /dev/null 2>/dev/null &
在 exec 命令的末尾使用?)。
答案2
我设法实现了我想要的,我最初的帖子中的代码一切都没问题,我唯一应该知道的是 www-data 用户不允许写入/var/log
,所以我没有输出。此外,在我的 PHP 脚本中,我试图创建一个文件并向其中写入一些内容,要做的是,绝对路径是必需的,所以它应该看起来像:
dirname(__FILE__) . '/myfile.txt';
经过这些更改后,一切都按预期进行。