Algumas tarefas agendadas do PHP começaram a falhar em um servidor compartilhado recentemente. Eles estavam trabalhando sem erros e sem atualizações há quase um ano, mas agora não seriam mais executados devido a erros de sintaxe. O que estava acontecendo?
Acontece que esses scripts estavam subitamente rodando no PHP 4, não no PHP 5. Há uma versão do PHP 4 instalada em / usr / local / bin / php, mas essa era a linha "shebang" nesses scripts:
#!/usr/local/php5/bin/php
Eu fiz alguns experimentos:
% /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
Eu não sabia que o Linux permitiria que as extensões de arquivos substituíssem as linhas shebang, mas é isso que estou vendo. O suporte na empresa de hospedagem não tinha ideia de por que isso estava acontecendo (ou o que mudou recentemente para que isso acontecesse), então fui com uma solução: renomeie os scripts para que eles não terminem mais em ".php".
As tarefas agendadas estão sendo executadas novamente, mas eu odeio uma resposta "apenas não faça isso". Estou muito curioso para saber de onde esse comportamento está vindo, porque eu nunca vi nada parecido com isso do * nix no nível do shell. Eu testei em ambos os zsh e bash, então eu não acho que posso culpar uma configuração de shell. Eu procurei por 'php' em / etc para ver se isso me daria alguma pista, mas não. Alguma idéia?