最近,一些
PHP cron作业在共享服务器上启动失败.他们在没有错误的情况下工作了近一年没有更新,但由于语法错误现在不再运行了.发生了什么事?
事实证明,这些脚本现在突然在PHP 4下运行,而不是PHP 5.在/usr/local / bin / PHP上安装了一个PHP 4版本,但这是这些脚本上的“shebang”行:
#!/usr/local/PHP5/bin/PHP
我做了一些实验:
% /usr/local/PHP5/bin/PHP --version PHP 5.2.6 (cli) (built: May 11 2008 13:09:39) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0,Copyright (c) 1998-2008 Zend Technologies with Zend Extension Manager v1.2.2,Copyright (c) 2003-2007,by Zend Technologies with Zend Optimizer v3.3.3,Copyright (c) 1998-2007,by Zend Technologies % echo '<?= PHPversion() ?>' | /usr/local/PHP5/bin/PHP 5.2.6 % printf '#!/usr/local/PHP5/bin/PHP\n<?= PHPversion() ?>' > version % chmod +x version % ./version 5.2.6 % mv version x.PHP % ./x.PHP 4.4.9
我不知道Linux会让文件扩展名覆盖shebang行,但这就是我所看到的.托管公司的支持不知道为什么会发生这种情况(或者最近发生了什么变化才能实现),所以我采用了一种解决方法:重命名脚本,使它们不再以“.PHP”结尾.
cron工作再次运行,但我讨厌“只是不要那样做”的答案.我真的很想知道这种行为来自哪里,因为我从来没有在shell级别从* nix看过这样的东西.我在zsh和bash下测试过,所以我认为我不能责怪shell配置.我在/ etc下面搜索’PHP’,看看是否会给我任何线索,但没有.有任何想法吗?