我正在使用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*

test.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文件,请考虑到运行php脚本的用户正在执行crontab -l命令。即,运行您的本地服务器的用户。

我做了一个测试:
$ 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/

10-11 22:10
查看更多