繁体   English   中英

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

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

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

* * * * * /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');

我使用“ shell脚本包装器”进行此操作。 我添加一个文件phpcron.sh

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

并将其添加到crontab。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM