【问题标题】:crontab issue when using exec php script?使用 exec php 脚本时的 crontab 问题?
【发布时间】:2013-06-02 04:58:52
【问题描述】:

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

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

谁能帮帮我?

【问题讨论】:

  • 是什么用户在执行php文件的脚本?必须是某个 apache,而不是您的用户。所以它显示了 apache 用户的 crontab。
  • chmod 0777 在那个文件上
  • -rwxrwxrwx 1 kn3l kn3l 47 Jun 6 14:59 test.php*

标签: php ubuntu cron crontab cron-task


【解决方案1】:

您的用户 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

which php 得到这个&lt;path to php&gt;

关于您的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 是空的,所以显示了一个空的内容。

【讨论】:

    【解决方案2】:

    试试这个

    <?
    $output = shell_exec('crontab -l');
    file_put_contents('/tmp/crontab.txt', $output.'* * * * * NEW_CRON'.PHP_EOL);
    echo exec('crontab /tmp/crontab.txt');
    ?>
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 太棒了。这是否回答了你的问题?如果是这样,你可以接受这个答案。
      【解决方案4】:

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

      #!/usr/bin/php
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-06
        • 2015-08-18
        • 2022-10-06
        • 1970-01-01
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多