o script bash não funciona conforme esperado através do crontab

o script bash não funciona conforme esperado através do crontab

estou trabalhando com sun Solaris 10qual sistema legado, criei um script que lida com um produtor específico e consiste em bash/perl/posix/sqlplus/awkcerca de 1k linhas e funciona bem no modo autônomo, funcionaria conforme o esperado, mas houve um problema em que o script não funciona no crontab. segui muitas sugestões através do StackOverflow/stackunixexchange como:

  1. comece com shebang#!/bin/bash
  2. script com permissão total 777
  3. sintaxe de hora certa do crontab
  4. serviço reiniciado
  5. carregou todas as variáveis ​​de ambiente no topo do shell
  6. defina o bash no início do script no crontab bash

meu problema apenas nesse script e o restante dos scripts funciona bem, talvez porque o script tenha que estar no bash e o crontab é executado por padrão com sh ou crontab carrega a variável de ambiente mínima

finalmente, resolvi o problema inserindo o shell necessário em outro shell e executando-o através do novo shell definindo o novo shell no crontab. Após esta etapa, posso ver que o crontab funcionou bem e pode executar o script, mas o problema é o script não faz o trabalho esperado, ele pula bash statementslike if statements e outros trabalhos como sqlplusprodutores / Perl statementsvocê pode dizer como resolver esse problema, esse problema aconteceu apenas ao agendar o script no crontab

shell no crontab se parece com:

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

o script começa como abaixo:

#!/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
.
.
.

Responder1

Você não pode alterar seu ambiente em um subshell: quando o subshell termina, as alterações são perdidas. O subshell não pode alterar o ambiente do pai. Você deve alterar o ambiente no shell atual. Faça esta alteração no seu script:

/rate/environment.sh >/dev/null

deveria estar

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

informação relacionada