El script de Crontab en un directorio diferente no funciona

El script de Crontab en un directorio diferente no funciona

Intenté actualizar mi código base diariamente usando el siguiente comando crontab. Pero el primer paso en sí no funcionó cuando lo probé.

27 15 * * * . cd /home/covuser/user/ && . /home/covuser/user/conf.sh
40 17 * * * . cd /home/covuser/user && . /home/covuser/user/checkout.sh

conf.sh contiene la variable de entorno necesaria para realizar la verificación del código. El archivo checkout.sh realiza el proceso de pago.

Se supone que la primera línea establece la variable de entorno requerida. Pero eso no está sucediendo.

¿Qué error has cometido en esto? Gracias de antemano.

Respuesta1

Cada línea de su crontab representa un trabajo independiente, que se programará y ejecutará de forma independiente.

Eso significa especialmente en su caso que se ejecutan en diferentes sesiones de shell, de modo que obtener un archivo de script para establecer algunas variables de entorno en un trabajo no afectará el entorno en el que se ejecutará otro trabajo más adelante.

Tendría que cambiar su proceso y ejecutar ambos scripts dentro de la misma sesión de shell y, por lo tanto, más fácilmente en el mismo trabajo cron.

Si necesita un retraso entre las ejecuciones, puede lograrlo, por ejemplo, en sleeplugar de programar un trabajo diferente con un tiempo posterior fijo.


Ah, y por supuesto, como se señaló en algunos de los otros comentarios y respuestas, solo puede generar scripts para .que se ejecuten en el entorno de shell actual en lugar de en un subshell. Sin embargo, cdno es un script sino un comando de shell integrado, que de todos modos siempre se ejecuta en el entorno de shell actual, por lo que escribir . cd somehweretambién es un error.

Respuesta2

Creo que el problema está en el .anterior your cd.

.(alias fro source) le permite obtener un archivo. Esto no funciona para componentes integrados de shell, como cd, ya que no son archivos ejecutables que puedan obtenerse.

Al concatenar los dos comandos con un AND - &&, el shell omite cualquier comando posterior a uno que falle, ya que no cambiará el valor del resultado resultante ( false && true == false). Puede reemplazar &&con a ;si desea otro comportamiento.

Esto debería funcionar :

27 15 * * * cd /home/covuser/user/ && . /home/covuser/user/conf.sh
40 17 * * * cd /home/covuser/user && . /home/covuser/user/checkout.sh

Actualizar: Si los scripts son dependientes (¿cuáles son, creo?), ejecute todo en una sola sesión. (Se abrirá una nueva sesión de bash para ejecutar cada entrada cron)

27 15 * * * cd /home/covuser/user/ && . /home/covuser/user/conf.sh && . /home/covuser/user/checkout.sh

información relacionada