php - 使用 exec php 脚本时的 crontab 问题?

标签 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

它适用于带有终端命令行的 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/

相关文章:

linux - Ubuntu 18.04.1 LTS 与 Yocto Sumo 2.5.1 兼容吗?

linux - ./build.sh inari 尝试为 inari 设备构建 Firefox OS 失败

php - 使用 MySQL 数据库处理 PHP Symfony 中的队列竞争条件

php - addslashes(stripslashes($field)) 能保证sql注入(inject)无漏洞吗?

php - 事件目录下具有基于信任的身份验证的 JavaScript 小部件

ubuntu - GitLab Runner 安装与注册

php - MySQL 表未在指定时间通过 PHP cron 作业更新

php - PHP 中的 5 分钟文件缓存

php - 存储状态标志的最佳方式

javascript - 如何在node js中的express api中包装议程路由