7 votos

Comando No Encontrado

Estoy configuración de una tarea en el cron para que se ejecute un archivo ejecutable de un script de bash que contiene un pypdfocr comando. Siempre que ejecutar manualmente el script todo funciona como se espera, si en lugar de eso usar cron con este horario:

* 6 * * * cd /path/to/ && ./executable

Me sale este error:

pypdfocr: command not found

Dado esto, en el script de bash que he tratado de dar la ruta de acceso 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 este problema?

9voto

Jenea Puntos 2702

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:

  1. Referencia directa a la ruta de acceso completa del archivo que necesito.
  2. 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.

0voto

SergeGardien Puntos 1

Al final he seguido la solución que se ofrece en Cómo utilizar macports Python en un cron job?.

Lo he comprobado en mi RUTA de acceso del entorno mediante la ejecución de env desde la Terminal, luego he exportado a mi ejecutable.

ejecutable:

#!/bin/bash
export PATH=/Library/Frameworks/Mono.framework/Versions/Current/bin/:/opt/local/bin:/opt/local/sbin://anaconda/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/2.6/bin:/sw/bin:/sw/sbin:/usr/bin:/bin:/usr/local/bin:/opt/X11/bin:/Users/USER/Library/Android/sdk/platform-tools/:/Users/USER/Library/Android/sdk/tools/:/usr/sbin/:/Users/USER/Tools/cpdf/OSX-Intel/
# ...
# REST OF SCRIPT
# ...

Después de esto he modificado mi cronfile con lo siguiente:

* * * * * /path/to/executable

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X