You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cron执行Bash脚本输出PHP头信息问题求助

解决Cron执行Bash脚本时出现PHP头信息的问题

嘿,我帮你捋捋这个问题——你遇到的核心问题很可能是Cron任务里用错了解释器!

一、先改Cron的执行命令,这是最关键的一步

你的script.sh是Bash脚本,结果你用/usr/bin/php -q去执行它,这完全不对呀!PHP是用来解析PHP代码的,它会把.sh里的Bash命令当成PHP代码瞎解析,自然会输出那些PHP的HTTP头信息。而你手动执行时肯定是用bash script.sh,所以一切正常。

把Cron任务改成用Bash来执行:

/bin/bash /home/user/rest/of/path/script.sh >/dev/null 2>&1

如果你的系统默认Shell是sh,也可以用/usr/bin/sh代替/bin/bash。

二、如果脚本里确实调用了PHP脚本

要是你的Bash脚本里有调用PHP脚本的命令,那也要确保这些PHP脚本在CLI模式下不会输出多余的头:

  • 检查那些PHP脚本里有没有header()函数调用,或者直接echo类似X-Powered-By、Content-type的内容——这些在CLI模式下完全没必要,直接删掉就行。
  • 调用PHP脚本时,一定要用CLI版本的PHP(通常就是/usr/bin/php),别用php-cgi这类CGI模式的执行程序,后者会自动输出HTTP头。比如脚本里的PHP调用应该写成:
    /usr/bin/php /path/to/your/php-script.php >> file.csv
    

三、排查Cron的环境变量差异

有时候Cron的环境变量和你手动登录服务器时的不一样,可能导致PHP的行为异常。你可以先在Cron里输出环境变量看看:

/bin/bash -c 'env > /tmp/cron_env.txt; /home/user/rest/of/path/script.sh >/dev/null 2>&1'

之后对比/tmp/cron_env.txt和你手动执行env的输出,重点看PATH、PHP_INI_SCAN_DIR这些和PHP相关的变量,确保Cron用的是正确的PHP版本。

内容的提问来源于stack exchange,提问作者user3398918

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:01:16