使用exec php脚本时crontab问题?

kn3*_*n3l 2 php ubuntu cron crontab cron-task

我正在使用elementaryOS(基于ubuntu)

当我运行逗号行时:

kn3l@kn3l:/var/www/cronjob$ 
25 15 * * * /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log
Run Code Online (Sandbox Code Playgroud)

它适用于带终端命令行的crontab.

但当我使用PHP与我的代码(test.php)时:

-rwxrwxrwx  1 kn3l kn3l    47 Jun  6 14:59 test.php*
Run Code Online (Sandbox Code Playgroud)

test.php的

<?php
    $output = shell_exec('crontab -l');
    echo "<pre>$output</pre>";
Run Code Online (Sandbox Code Playgroud)

我去http://localhost/test.php

为什么我没有看到命令行的任何返回?

有人可以帮帮我吗?

fed*_*qui 5

您的用户crontab中包含以下行:

25 15 * * * /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log
Run Code Online (Sandbox Code Playgroud)

在crontab中,有必要指出哪个二进制文件正在执行脚本.因此,如hw所示,您需要将其替换为

25 15 * * * <path to php> /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log
Run Code Online (Sandbox Code Playgroud)

得到这个<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
Run Code Online (Sandbox Code Playgroud)

所以在我的情况下,运行apache的用户是www-data.

我添加了你的文件/var/www:

<?php
    $output = shell_exec('crontab -l');
    echo "<pre>$output</pre>";
?>
Run Code Online (Sandbox Code Playgroud)

执行它时没有任何东西出现.为什么?因为www-data没有crontab:

$ sudo crontab -l -u www-data
no crontab for www-data
Run Code Online (Sandbox Code Playgroud)

我添加了一行:

$ sudo crontab -l -u www-data
* * * * * touch /tmp/tt
Run Code Online (Sandbox Code Playgroud)

现在php页面显示:

* * * * * touch /tmp/tt
Run Code Online (Sandbox Code Playgroud)

总结一下

问题不在于您的脚本无法正常工作,只是显示空内容,因为用户的crontab为www-data空.