PHP`exec()`如果由Cron运行则不起作用

时间:2016-01-28 06:25:45

标签: php cron centos crontab centos7

我有一个PHP脚本,每分钟由crontab调用,如下所示:

* * * * * /usr/bin/php /var/www/html/cronjobs/watchdog/watchdogExec.php

该脚本执行许多其他PHP脚本并传递如下变量:

$ccmd = "nohup sudo /usr/bin/php watchdog.php " . $var . " &";
exec($ccmd);

从浏览器调用时, watchdogExec.php 运行正常并完成其工作。但是,当我添加cronjob时,脚本无法运行,并且发送垃圾邮件时出现以下错误:

No entry for terminal type "unknown";
using dumb terminal settings.

此错误出现exec()被调用的次数相同,所以我认为这一定是个问题。我搜索并阅读了cronjob没有在终端中运行命令,我尝试在crontask中设置环境,但它没有帮助。显然PHP正在打印这个错误,但我在他们的文档中找不到任何关于它的内容。

* * * * *  /usr/bin/env TERM=xterm /usr/bin/php /var/www/html/cronjobs/watchdog/watchdogExec.php

我正在运行CentOS 7.

编辑:

进行了一些搜索,发现了有关PHP环境变量的信息。有人通过在PHP脚本中添加以下内容来修复类似的问题。但是,这不是解决我的问题,它只会阻止邮件垃圾邮件。该脚本仍无效。

putenv('SHELL=/bin/bash');
putenv('TERM=xterm');

2 个答案:

答案 0 :(得分:1)

我使用'shell脚本包装器'执行此操作。我用

添加了一个文件phpcron.sh
#!/bin/bash   
php -f filename.php

并将其添加到crontab。

* * * * * /var/www/phpcron.sh

答案 1 :(得分:1)

您是否尝试过在exec语句中使用完整路径?还尝试添加TERM环境变量:

$ccmd = "nohup /usr/bin/sudo /usr/bin/env TERM=xterm /usr/bin/php watchdog.php " . $var . " &";