我正在使用 elementaryOS(基于 ubuntu)
当我运行命令行时:
kn3l@kn3l:/var/www/cronjob$
25 15 * * * /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log
它适用于带有终端命令行的 crontab。
但是当我将 PHP 与这样的代码 (test.php) 一起使用时:
-rwxrwxrwx 1 kn3l kn3l 47 Jun 6 14:59 test.php*
测试.php
<?php
$output = shell_exec('crontab -l');
echo "<pre>$output</pre>";
我去http://localhost/test.php
为什么我没有看到像命令行那样的返回?
谁能帮帮我?
最佳答案
您的用户 crontab 中有以下行:
25 15 * * * /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log
在 crontab 中,有必要指出哪个二进制文件正在执行脚本。所以hw indicates ,您需要将其替换为
25 15 * * * <path to php> /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log
得到这个<path to php>
与 which php
.
关于您的 test.php
文件,请考虑命令 crontab -l
正在由运行 php 脚本的用户执行。即,运行您本地服务器的用户。
我做了一个测试:
$ ps -ef | grep apac
.../...
www-data 1348 1332 0 09:50 ? 00:00:00 /usr/sbin/apache2 -k start
所以在我的例子中,运行 apache 的用户是 www-data。
我在 /var/www
中添加了您的文件:
<?php
$output = shell_exec('crontab -l');
echo "<pre>$output</pre>";
?>
执行时什么也没有出现。为什么?因为www-data
没有 crontab:
$ sudo crontab -l -u www-data
no crontab for www-data
我加了一行:
$ sudo crontab -l -u www-data
* * * * * touch /tmp/tt
现在 php 页面显示:
* * * * * touch /tmp/tt
总结
问题不是您的脚本无法正常工作,而是显示空内容作为用户 www-data
的 crontab是空的。
关于php - 使用 exec php 脚本时的 crontab 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16957789/