El script de mi consola CakePHP tiene problemas al ejecutarse en cron. Se queja de que faltan conexiones Mysql y demás.
Después de investigar un poco, descubrí que php ejecutado por cron usa un archivo php.ini diferente en comparación con cuando lo ejecuto en la terminal.
Lo que es aún más extraño es que en la terminal, php no usa la configuración cli:
PHP ejecutado en la terminal:
Archivo de configuración (php.ini) Ruta: /usr/local/lib Archivo de configuración cargado: /usr/local/lib/php.ini Busque archivos .ini adicionales en: (ninguno) Archivos .ini adicionales analizados: (ninguno)
PHP ejecutado por cron:
Archivo de configuración (php.ini) Ruta: /etc/php5/cli Archivo de configuración cargado: /etc/php5/cli/php.ini Busque archivos .ini adicionales en: /etc/php5/cli/conf.d Archivos .ini adicionales analizados: /etc/php5/cli/conf.d/memcache.ini, /etc/php5/cli/conf.d/mysql.ini, /etc/php5/cli/conf.d/mysqli.ini, /etc/php5/cli/conf.d/pdo.ini, /etc/php5/cli/conf.d/pdo_mysql.ini, /etc/php5/cli/conf.d/suhosin.ini, /etc/php5/cli/conf.d/xcache.ini
No tengo idea de por qué no utiliza los mismos archivos de configuración. No noto nada especial en las ENV
variables en la terminal o cuando se ejecuta como cron.
Respuesta1
No estoy seguro de si este es un comportamiento estándar o no, pero siempre puedes agregar
-c /usr/local/lib/php.ini
al comando para usar una configuración personalizada.
Respuesta2
Quizás no estés usando el mismo php
binario en la terminal y en cron, debido a una PATH
configuración diferente.
Ingrese which php
a la terminal y coloque la ruta completa al php
binario en su script cron.
Respuesta3
Estoy de acuerdo con Oliver: debes poner la ruta completa a php en cron. También puede incluir un parámetro PATH en el archivo cron, pero probablemente sea mejor utilizar una ruta absoluta a php.