El script bash no funciona como se esperaba a través de crontab

El script bash no funciona como se esperaba a través de crontab

Estoy trabajando con sun Solaris 10qué sistema heredado, he creado un script que maneja un productor específico y consta de bash/perl/posix/sqlplus/awkalrededor de 1k líneas y funciona bien en modo independiente, funcionaría como se esperaba, pero hubo un problema por el cual el script no funciona en crontab. He seguido muchas sugerencias a través de StackOverflow/stackunixexchange como:

  1. empezar con shebang#!/bin/bash
  2. script con permiso completo 777
  3. sintaxis de tiempo de crontab correcta
  4. servicio reiniciado
  5. cargó todas las variables de entorno en la parte superior del shell
  6. establecer bash al comienzo del script en crontab bash

mi problema solo en ese script y el resto de los scripts funcionan bien tal vez porque el script tiene que estar en bash y crontab se ejecuta de forma predeterminada con sh o crontab carga una variable de entorno mínima

finalmente, resolví el problema insertando el shell necesario en otro shell y ejecutándolo a través del nuevo shell configurando el nuevo shell en crontab, después de este paso puedo ver que crontab funcionó bien y puede ejecutar el script, pero el problema El script no hace el trabajo esperado, se salta trabajos bash statementssimilares if statements y otros como sqlplusproductores. Perl statements¿Puede decirnos cómo se puede resolver este problema? Este problema ocurrió solo al programar el script en crontab.

shell en crontab se ve así:

10 10,16 * * 1,4 bash /rate/u01/WORK/MP/ERROR/USAGE_REJECTIONS/HolderUsageShell.sh

el script comienza de la siguiente manera:

#!/bin/bash 
#environment shell contains all environment variables, I have tried to run it with/without and I got the same thing
/rate/environment.sh >/dev/null

cd /rate/path/
CurrentHour=$(date +%I)
DAY_In_Word=$(date +%A)

if [[ "$DAY_In_Word" == "Monday" || "$DAY_In_Word" == "Thursday" ]] && [[ "$CurrentHour" == "10" ]]; then
.
.
.

Respuesta1

No puede cambiar su entorno en una subcapa: cuando finaliza la subcapa, los cambios se pierden. La subcapa no puede cambiar el entorno de los padres. Debe cambiar el entorno en el shell actual. Realice este cambio en su script:

/rate/environment.sh >/dev/null

debiera ser

. /rate/environment.sh >/dev/null

información relacionada