PHP 如果 Cron 运行 `exec()` 不起作用
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');
我用 'shell script wrapper' 来做这个。我用
添加文件 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 . " &";
我有一个 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');
我用 'shell script wrapper' 来做这个。我用
添加文件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 . " &";