Estoy configurando un trabajo cron para ejecutar un script bash ejecutable que contiene un comando pypdfocr. Cada vez que ejecuto manualmente el script, todo funciona como se esperaba, si en cambio uso cron con este programa:
* 6 * * * cd /path/to/ && ./executable
Me sale este error:
pypdfocr: command not found
Dado esto, en el script bash he intentado dar la ruta completa a pypdfocr, es decir:
/anaconda/bin/pypdfocr
Pero ahora tengo:
/bin/sh: pdfimages: command not found
/bin/sh: gs: command not found
¿Alguna idea de cómo puedo solucionar esto?

pdfimagesygsen su secuencia de comandos.Respuestas:
Cuando
cronejecuta un evento, utiliza el entorno de shell predeterminado del UID en ejecución. Sin embargo, no se aplica la personalización de "perfil", es decir, su.bash_profilefuente no se obtiene y, por lo tanto, no se selecciona ninguna configuración de RUTA. Además, tampoco creo que se recojan los perfiles comunes. Como tal, es probable que tenga ningunaPATHoLD_LIBRARY_PATHvalores de entorno disponibles para el proceso que está tratando de poner en marcha y es por esopdfimagesygsno está siendo recogido por defecto.En el pasado, resolví esta de dos maneras:
Normalmente prefiero el segundo puesto que no solo me permite configurar un entorno para ejecutar el trabajo, sino que también hace que sea relativamente fácil agregar situaciones de depuración fácilmente. Por ejemplo, si el trabajo no funciona correctamente, puedo editar el script de shell y
STDOUTredirigirlo a un archivo de depuración.En resumen, tendría una entrada cron de
* 6 * * * cd /path/to/ && ./executable.sh.. lo que iba a cambiar a la ruta, pero la
executable.shharía toda laexport PATH,export LD_LIBRARY_PATH, etc para ponerse en marcha mi trabajo.Su muestra
executable.shpodría ser tan simple como esta:La
executable.outredirección de archivos no es necesaria ya que sin que todoSTDOUTvaya acron.out, pero hace que sea un poco más limpio hacerlo de esta manera. También el2>&1sinsentido con el paréntesis asegura que ambosSTDERRySTDOUTque sea en el archivo de salida; Esto ayuda a depurar por qué no se ejecutó un trabajo.fuente
croncrea su propio ambiente. En particular, SHELL se establece en/bin/shy PATH se establece en/usr/bin:/bin. El entorno puede personalizarse en un usuariocrontab. Leer más enman 5 crontab.Al final, he seguido la solución proporcionada en ¿Cómo usar Macports Python en un trabajo cron? .
Verifiqué mi RUTA del entorno ejecutándome
envdesde la Terminal, luego la exporté a mi ejecutable.ejecutable:
Después de esto, modifiqué mi cronfile con lo siguiente:
fuente