加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

从cron运行php没有以CLI身份运行

发布时间:2020-12-13 16:26:34 所属栏目:PHP教程 来源:网络整理
导读:一个php脚本从cron开始运行到超时之后我注意到了这个问题,但是当它从命令行手动运行时不是问题. (默认情况下,CLI的max_execution_time为0) 所以我试着运行一个简单的cron: 50 8 * * * php -q /tmp/phpinfo.php /tmp/phpinfo 该脚本只会调用phpinfo(). 令人
一个php脚本从cron开始运行到超时之后我注意到了这个问题,但是当它从命令行手动运行时不是问题. (默认情况下,CLI的max_execution_time为0)

所以我试着运行一个简单的cron:

50 8 * * * php -q /tmp/phpinfo.php > /tmp/phpinfo

该脚本只会调用phpinfo().

令人惊讶的是,它以html格式写出了phpinfo,这表明它不是作为CLI运行的.并且max_execution_time在输出中为30.

从命令行手动运行脚本

php -q /tmp/phpinfo.php | less

以文本格式写出了php信息,输出中的max_execution_time为0.

我知道某处肯定存在配置问题,但我找不到问题所在.这发生在生产服务器上,我可以完全控制它.在我的开发机器上从cron运行相同的脚本运行正常.

以下是差异的摘要

function             | CLI                     | cron                   |
php_sapi_name        | cli                     | cgi-fcgi               |
php_ini_loaded_file  | /usr/local/lib/php.ini  | /usr/local/lib/php.ini |
我怀疑你的问题在于缺少环境变量,特别是最重要的$PATH.当你运行这个:
php -q /tmp/phpinfo.php

系统必须通过php找出你的意思.它通过按顺序查看当前$PATH环境变量中的目录来完成此操作.

从正常的shell执行,您的环境的设置方式使其能够像您期望的那样找到PHP的CLI版本.

但是,当cron执行命令时,它会在没有交互式shell设置的所有环境变量的情况下执行此操作.由于在您的系统上可能会有其他可执行文件称为php,对于不同的“SAPI”,根据您从php_sapi_name()报告的输出,它可能会选择“错误的” – 在您的情况下,cgi-fcgi可执行文件.

要解决此问题,首先通过键入以下内容找到正常shell中正确的php可执行文件的路径:

which php

这应该给你一个像/usr/bin/php这样的路径.您可以进一步检查这是否实际上是指向不同文件名的“符号链接”:

ls -l $(which php)

(你会在输出中看到一个箭头,如/usr/bin/php – > /usr/bin/php5-cli)

然后把这个完整的路径带到PHP可执行文件并在你的crontab条目中使用它,所以它看起来像这样:

50 8 * * * /usr/bin/php5-cli -q /tmp/phpinfo.php > /tmp/phpinfo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读