Tengo un script test.sh
#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh
cuando ejecuto el archivo como root desde la línea de comandos funciona.
sh /home/v/test.sh
cuando lo configuro en crontab -e (es el cron raíz), no funciona
* * * * * sh /home/v/test.sh
¿Qué hago mal? Gracias
Respuestas:
Según el hombre:
Entonces, cron daemon no sabe dónde está php y debe especificar la ruta de php completa a mano, por ejemplo (no sé su ruta de PHP real):
Otra forma es obtener el / etc / profile (o su .profile / .bashrc), por ejemplo
Esto es útil si su .bashrc establece las variables de entorno que necesita (es decir, RUTA)
EDITAR
Una lectura interesante es " Newbie: Intro to cron ", no subestimes el artículo del título (es una lectura para todos), de hecho está bien escrito y responde perfectamente a tu pregunta:
fuente
Hay cuatro causas comunes para que los comandos funcionen cuando se escriben en una terminal pero no desde cron, en orden de comunidad:
$PATH
, y faltan otras variables esperadas.Si su trabajo produce algún resultado, incluidos mensajes de error, cron le envía un correo electrónico con todo el resultado. Asegúrese de leer el correo que recibe localmente o reenvíelo a una dirección que leyó. Para reenviar el correo de una cuenta local a otra dirección, ingrese la otra dirección
~/.forward
. Si el trabajo de cron se ejecuta como un usuario del sistema (root
,webmaster
, ...), asegúrese de que el correo del usuario es redirigido a usted (y cualquier otro administrador); con la mayoría de las configuraciones de correo, coloque líneas comoroot: elzo
en/etc/aliases
.fuente
El demonio cron generalmente ejecuta su comando en un shell donde la variable de entorno PATH está restringida a algunos valores predeterminados del sistema, por ejemplo / usr / bin: / bin.
Probablemente, su
php
comando no está disponible en / usr / bin o / bin y, por lo tanto, el script falla cuando se ejecuta a través de cron y se ejecuta correctamente cuando no.Cron generalmente informa errores o mensajes de trabajo por correo electrónico al usuario raíz (es decir, cuando un comando devuelve un estado de salida! = 0 o produce una salida a stdout / stderr) después de que el trabajo finaliza.
Dependiendo de su sistema, debe configurar la entrega de correo local para recibir estos mensajes.
fuente