我正在使用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
为什么我没有看到命令行的任何返回?
有人可以帮助我吗?
答案 0 :(得分:5)
您的用户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为空。
答案 1 :(得分:1)
您必须以这种方式执行脚本:
25 15 * * * /usr/bin/php /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log
确保/usr/bin/php
在您的系统上有效。
答案 2 :(得分:1)
试试这个
<?
$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'* * * * * NEW_CRON'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');
?>
答案 3 :(得分:1)
将第一个字符串添加到test.php
#!/usr/bin/php