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

标签 php centos cron 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 not running commands in a terminal 的信息,我尝试在 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 语句中使用完整路径?还可以尝试添加 TERM 环境变量:

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

关于PHP `exec()` 如果由 Cron 运行则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35054223/

相关文章:

php - 正则表达式在php中分隔单词数字和符号

linux - Redhat/CentOS - 找不到 `GLIBC_2.18'

cron - 需要在 Google 计算引擎 (gce) 上运行 cron 作业,以使用服务帐户执行 gcloud 快照

php - 如何将 mysql UPDATE 限制为仅在 for 循环中处理的行?

php - set_time_limit 不适用于heroku

php - MySQL WHERE 'all' 未提供任何值时

php - 根据数据库中的表检查 url

apache - 配置虚拟主机以部署 Rails 应用程序

Centos7 上的 PHP-FPM 与 Directadmin -> 通过 httpd-alias 的 url 未解析为 php

java - 如何在java web应用程序中每30分钟调用一次类(class)