0 votos

Obteniendo un error de comando desconocido al intentar ejecutar script a través de cron

Recientemente he tenido que reinstalar 10.9.5 (instalación por defecto) y ahora me encuentro con que los bash scripts que se ejecutan perfectamente desde la línea de comandos (~/Me...) ya no funcionan usando crontab. Uso crontab para invocar "Diskutil unmount volumeX" pero estoy recibiendo un correo de cron diciendo que el comando "diskutil" no se encuentra. Es un problema de PATH y si es así como lo solucionaría. Gracias de antemano por cualquier ayuda.

2voto

cron utiliza /usr/bin:/bin por defecto PATH y diskutil está en /usr/sbin .

Especifique la ruta completa a diskutil o añadir una línea como PATH=/usr/bin:/bin:/usr/sbin:/sbin al inicio de su crontab.

Entre en which diskutil para encontrar su camino, o introduzca echo $PATH para encontrar la ruta en la que funcionan sus comandos.

0voto

Joel Puntos 112

Pregunta:

¿Es un problema de PATH y, si es así, cómo puedo solucionarlo?

Respuesta a "¿Es un problema de PATH?":

Lo más probable es que se trate de un "problema de PATH". Pero el verdadero problema es sin saber el verdadero valor de $PATH que cron utiliza. Esa es la cuestión que abordará esta respuesta.

Como usuario de cron una de las cosas que debes entender es que aunque cron ejecuta su crontab instrucciones en su nombre, y bajo su identificación de usuario, lo hace dentro de un medio ambiente que como usuario "conectado".

Tal vez la forma más fácil de descubrir cuál es su entorno cuando se ejecuta un trabajo de cron es preguntar cron para que te lo cuenten. Eso se hace fácilmente de la siguiente manera:

% crontab -e

# in your editor, add the following line, then save & close your new crontab 

* * * * * printenv > /Users/$USER/mycronenvironment.txt 2>&1

# now wait for the output:

% tail -f ~/mycronenvironment.txt

Querrás detener esto en breve, así que edita y guarda tu crontab . El resultado se parecerá a esto:

SHELL=/bin/sh
USER=seamus
PATH=/usr/bin:/bin
PWD=/Users/seamus
SHLVL=1
HOME=/Users/seamus
LOGNAME=seamus
_=/usr/bin/printenv

Tenga en cuenta la PATH La variable se limita a /usr/bin & bin . Así que - su cron el trabajo se verá en ningún otro lugar para un archivo. Ahora puede comparar este medio ambiente contra el de su acceso interactivo shell. Simplemente ejecute printenv desde el shell de inicio de sesión ( zsh en modelos posteriores de Mac):

% printenv
...
PATH=/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Library/Apple/usr/bin  
...

Esta diferencia en el PATH variables de entorno explica el origen de un error de "comando desconocido" generado por cron : el comando no está en el PATH de la cáscara utilizada por cron .

Respuesta a "¿Cómo lo arreglo?":

En general, hay dos métodos:

  1. Utilice una especificación de ruta completa para todo en su crontab

    Por ejemplo: /usr/sbin/diskutil unmount volumeX

  2. Definir (redefinir) PATH en su crontab

    Y, como siempre, hay numerosas formas de hacerlo. Si quieres usar tu "usuario conectado" PATH como el PATH para su "usuario cron":

    % echo $PATH
    /opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Library/Apple/usr/bin
    
    % crontab -e
    # copy and paste the $PATH string at the top of the file as follows:
    
    PATH=/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Library/Apple/usr/bin
    
    # save & close your `crontab`  
    # you can re-activate the `printenv` cron job again to verify the new path

    A variación sobre este enfoque podría ser el siguiente:

    • Cree un archivo llamado (por ejemplo) ~/.cronpath

    • Ponga una sola línea en este archivo: PATH=/usr/bin:/bin:<other folders> donde <otras carpetas> es una lista separada por dos puntos de las carpetas que desea añadir a la carpeta por defecto PATH .

    • Fuente del archivo ~/.cronpath al reiniciar en su crontab :

      @reboot . /Users/$USER/.cronpath

      ...

      remainder of crontab entries

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