2

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

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

任何人都可以帮助我吗?

4

4 回答 4

5

您的用户 crontab 中有以下行:

25 15 * * * /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log

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

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

总结一下

问题不是你的脚本不能正常工作,只是因为用户的 crontabwww-data是空的,所以显示了一个空的内容。

于 2013-06-06T09:15:27.077 回答
2

试试这个

<?
$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'* * * * * NEW_CRON'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');
?>
于 2013-06-06T09:05:23.550 回答
1

您必须以这种方式执行脚本:

25 15 * * * /usr/bin/php /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log

确保这/usr/bin/php在您的系统上有效。

于 2013-06-06T09:02:03.513 回答
1

添加到 test.php 的第一个字符串

#!/usr/bin/php
于 2013-06-06T09:14:58.830 回答