Algunos de PHP cron jobs comenzó a fallar en un servidor compartido recientemente. Ellos habían estado trabajando sin error y no se actualiza desde hace casi un año, pero ahora ya no corren debido a errores de sintaxis. ¿Qué estaba pasando?
Resulta que estas secuencias de comandos de repente ahora se ejecuta en PHP 4, no 5 de PHP. Hay una versión de PHP 4 instalado en /usr/local/bin/php, pero este fue el "proceso" de la línea en estas secuencias de comandos:
#!/usr/local/php5/bin/php
Hice algunos 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
Yo no sabía Linux sería dejar que las extensiones de archivo anular el proceso de las líneas, pero que es lo que estoy viendo. Apoyo a la empresa de hosting no tenía idea de por qué estaba pasando esto (o lo que había cambiado recientemente a hacer que suceda), así que me fui con una solución: cambiar el nombre de los scripts para que no terminan en ".php".
Los trabajos de cron se ejecuta de nuevo, pero no me gusta un "no lo hagas" como respuesta. Estoy muy curioso de saber que este comportamiento viene, porque nunca he visto nada como esto de *nix en la shell de nivel. He probado tanto bajo zsh y bash, así que no creo que me pueden culpar a un shell de configuración. Yo grepped para 'php' en /etc para ver si me daba alguna pista, pero no. Alguna idea?