estou trabalhando com sun Solaris 10
qual sistema legado, criei um script que lida com um produtor específico e consiste em bash/perl/posix/sqlplus/awk
cerca 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:
- comece com shebang
#!/bin/bash
- script com permissão total 777
- sintaxe de hora certa do crontab
- serviço reiniciado
- carregou todas as variáveis de ambiente no topo do shell
- 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 statements
like if statements
e outros trabalhos como sqlplus
produtores / Perl statements
você 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