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


PHP `exec()` doesn't work if run by Cron

我有一个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');

您是否也尝试过在exec语句中使用完整路径?此外,请尝试添加术语环境变量:

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

我使用"shell脚本包装器"来做到这一点。我添加了一个phpcron.sh的文件

#!/bin/bash   
php -f filename.php

并将其添加到 crontab。

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