O script do KShell ignora os comandos quando agendados no cron

0

Eu tenho um script do Kshell que executa um programa em java.

/path/to/java -jar jarfile.jar some parameters > log
Same line 5 times with different parameters appending output to log file.
cat log | mail -s [email protected]

O problema que tenho é quando coloco este script no cron apenas na última linha que pega os arquivos de log & envia e-mail é executado. Todas as linhas reais requeridas funcionalmente acima são ignoradas. Recebo um email em branco no horário agendado do cron, mas o script deve demorar cerca de uma hora.

Mas quando eu executo o script manualmente, está funcionando bem.

    
por Weqaar Mohammed 14.03.2016 / 08:15

2 respostas

1

Eu verifiquei as mensagens do cron em busca de problemas. Para "não é possível acessar o arquivo jarfile.jar", adicionei o caminho completo no script e, para "cat: 0652-050 Não é possível abrir / caminho / para / log", criei o arquivo de log antes de usar o comando touch. Agora meu script é assim.

touch /path/to/log
/path/to/java -jar /path/to/jarfile.jar some parameters > /path/to/log
Same line 5 times with different parameters appending output to log file.
cat /path/to/log | mail -s [email protected]

Eu vim a saber que dar caminho absoluto é a chave para evitar esses tipos de problemas.

    
por 14.03.2016 / 16:01
0

É o bom e velho problema "cron com seu ambiente muito simples". Quando você executa seu script em seu próprio shell, os processos iniciados estão em um ambiente definido por seus perfis. No entanto, suas tarefas do cron iniciam em um ambiente muito básico, sem muitas variáveis e informações de caminho. Na verdade, isso pode ser adivinhado procurando no cron mail enviado sobre suas execuções ou o log global do daemon do cron.

Ao usar o ksh, sugiro que você faça o sourcing .kshrc ou .profile no início do script:

. /home/yourid/.kshrc
. /home/yourid/.profile
    
por 14.03.2016 / 09:56