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
相关产品推荐
相关产品推荐

