El problema
Ejecutar un script usando el servicio cron, que se ejecuta normalmente desde el shell pero no muestra el mismo comportamiento cuando se ejecuta desde crontab.
Causa raíz
Una de las causas más frecuentes por las que el trabajo crontab no se ejecuta correctamente es que un trabajo cron no se ejecuta en el entorno de shell del usuario. Otra razón puede ser:no especificar la ruta absoluta de los comandos utilizados en el script. Cuando el script se ejecuta manualmente, la variable de entorno, como PATH, puede ser diferente que cuando se ejecuta desde el cron. Por lo tanto, siempre se recomienda incluir las rutas absolutas de los comandos utilizados en el script.
Por esa razón, cualquier variable de entorno para el usuario que esté presente en un shell normal no estará disponible durante la ejecución del trabajo cron a menos que el script las importe explícitamente.
Por ejemplo, si el shell tiene una variable ORACLE_HOME definida y la incluye en la variable de entorno PATH y el script hace uso de esas variables, el script se ejecutará en la venta, pero cuando se ejecute desde crontab, el script no tendrá conocimiento de esas variables. por defecto.
La solución
Defina o importe ORACLE_HOME y la variable PATH completa en el archivo de secuencia de comandos cron, como se ve cuando está dentro del shell de usuario de Oracle (oracle_user_shell> echo $PATH).
Una buena práctica es importar siempre el entorno de usuario al principio del script script.sh con el comando:
#!/bin/bash . /home/oracle/.bashrc [rest of script]
Esto leerá /home/oracle/.bashrc e importará el entorno dentro. Según el entorno del usuario, también puede ser /home/oracle/.bash_profile u otros archivos.
NOTA :Hay un espacio entre el punto “.” y “/casa..”
[* * * * *] /home/oracle/script.sh 2> /tmp/crontab_script_log.txt 2>&1
Nota :Reemplace [* * * * *] con los tiempos de ejecución correctos para su caso.
A continuación, puede consultar /tmp/crontab_script_log.txt para ver el resultado de la ejecución. Si alguna variable no está definida o si el script tiene otros errores, la salida hará que sea más fácil encontrar la causa del problema.