Cuando cron
ejecuta un evento, se utiliza el shell por defecto del entorno de la ejecución de la UID. Sin embargo, no hay un "perfil" de la personalización se aplica, es decir, su .bash_profile
no es procedente y por lo tanto, cualquier configuración de la RUTA no son recogidos. Así, no creo que el común de los perfiles son recogidos. Como tal, usted probablemente no tiene PATH
o LD_LIBRARY_PATH
medio ambiente ajustes de configuración disponibles para el proceso que estamos tratando de lanzamiento y esta es la razón por la pdfimages
y gs
no está siendo recogido por defecto.
En el pasado, he resuelto esto de dos maneras:
- Referencia directa a la ruta de acceso completa del archivo que necesito.
- Crear un contenedor de secuencia de comandos de shell para el trabajo.
Yo normalmente prefiero la 2, ya que no sólo me permite configurar un entorno para el trabajo a ejecutar, sino que también hace que sea relativamente fácil para agregar depuración situaciones fácilmente. Por ejemplo, si el trabajo no está funcionando correctamente solo puedo editar el script de shell y poner en STDOUT
redirección a un archivo de depuración.
Así que, en breve, me gustaría tener un cron entrada de
* 6 * * * cd /path/to/ && ./executable.sh
.. que iba a cambiar la ruta, pero el executable.sh
haría todo el export PATH
, export LD_LIBRARY_PATH
, etc. para llegar a mi trabajo conjunto.
Su ejemplo executable.sh
podría ser tan simple como esto:
#!/bin/bash
# if you want to just pick up your profile, you can '.' source it
. ~/.bash_profile
export PATH=/where/i/find/gs
export LD_LIBRARY_PATH=/if/i/need/libs
(./executable 2&>1) >executable.out
El executable.out
archivo de redirección no es necesario ya que sin él todo STDOUT
va a la cron.out
, pero lo hace un poco más limpio que hacerlo de esta manera. También la 2>&1
tonterías con el paréntesis se asegura de que tanto STDERR
y STDOUT
lo hacen en el archivo de salida; esto ayuda a la depuración ¿por qué un trabajo no se ha ejecutado.