"Comando no encontrado" al ejecutar un script a través de cron

29

Quiero ejecutar mi script en crontab, pero tengo algunos problemas ...

En mi script ejecuto este comando:

db2 connect to myDB2

Esto funciona bien cuando ejecuto esto como usuario db2inst1 , pero cuando ejecuto este script en db2inst1 crontab , obtengo esto:

db2: comando no encontrado.

¿Como puedo resolver esto?

Wolfy
fuente

Respuestas:

43

Para evitar tener que escribir la ruta absoluta a un comando, los shells introdujeron la $PATHvariable de entorno, cada directorio está separado por a :y las búsquedas se realizan de izquierda a derecha. crona menudo borra todo el entorno, incluida esta $PATHvariable. Por lo tanto, el script puede comportarse de manera diferente en su cron en comparación con el comportamiento en el shell.

Usa caminos absolutos

Ejecútelo which db2como db2inst1usuario para obtener la ruta completa del db2programa. Si el resultado es /usr/bin/db2, su comando cron se vería así:

/usr/bin/db2 connect to myDB2

Establecer la variable RUTA

Ejecute echo "$PATH"como db2inst1usuario para obtener la $PATHvariable y asegúrese de que esta variable también esté disponible en su secuencia de comandos cron. Por ejemplo, si el resultado fuera /usr/local/bin:/usr/bin:/bin, colocaría la siguiente línea en la parte superior de su script de shell:

export PATH="/usr/local/bin:/usr/bin:/bin"
Lekensteyn
fuente
8

Como se respondió en /ubuntu//a/23438/227839 , debe configurar PATHen su script de shell:

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

o en el archivo crontab, que se aplicará a todos los trabajos cron:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2
Presa Linh
fuente
¡Gracias, fue útil!
Yamashiro Rion
3

Debe definir qué son db2 y myDB2 ; de lo contrario, utilice la ubicación absoluta de ' archivo ' o ' aplicación ' que desea ejecutar.

Ejemplo:

/bin/rm /home/ubuntu/a.txt
Mahmudin Ashar
fuente