Por que não está trabalhando Job começa por Cron?

0

Eu escrevi o shell script

#!/bin/bash
#clear
#echo "Good morning, world."
source activate python36
python /opt/project1/Table_Control.py opt/project1/connection.yaml

Depois que eu escrevi no cron

# job 
1 19 * * * /opt/project1/start.sh

e tentei outra variante

# job 
1 19 * * * cd /opt/project1/ && ./start.sh

Verificou e obteve resultado

May 11 19:01:01 server01 CROND[127428]: (root) CMD (/opt/project1/start.sh)

e

May 11 19:43:01 server01 CROND[13797]: (root) CMD (cd /opt/project1/ && ./start.sh)

MAS trabalho deve enviar-me e-mail, não recebeu nenhum email ((

Executou o shell script

/opt/project1/start.sh

trabalhe BOM.

Como resolver esse problema?

    
por Nikolay Baranenko 12.05.2018 / 11:34

3 respostas

0

Geralmente, para depurar esses problemas, pode ser útil adicionar alguns logs, possíveis para cada linha. Assim:

source activate python36 >> /tmp/1.log 2>&1

python opt/project1/Table_Control.py opt/project1/connection.yaml >> /tmp/2.log 2>&1

Você também pode definir a tarefa Cron para ser executada a cada minuto para que você não precise esperar. Deve ajudar.

    
por 12.05.2018 / 15:57
1

Um erro comum ao escrever scripts que serão executados posteriormente pelo cron, é que você assume que o script terá exatamente o mesmo ambiente que você tem quando está logado e o está desenvolvendo. Não tem!

Esta resposta explica ainda mais a diferença no ambiente do processo e na depuração.

No entanto, sua linha source activate python36 assume que a ativação está no diretório atual, também há uma suposição de que python está no caminho da tarefa Cron.

Coloque seu comando em seu próprio subshell e redirecione tudo para um arquivo de log para ver o que está acontecendo.

por exemplo,

1 19 * * * (cd /opt/project1/ && ./start.sh) >/tmp/pr1.log 2>&1
    
por 12.05.2018 / 16:23
0

Após a mudança

python opt/project1/Table_Control.py opt/project1/connection.yaml >> /tmp/2.log 2>&1

Em log eu encontrei erro Python não encontrou pedidos módulo python.

eu mudei

python opt/project1/Table_Control.py opt/project1/connection.yaml >> /tmp/2.log 2>&1

para

/data/Anaconda2-4.4.0/envs/python36/bin/python opt/project1/Table_Control.py opt/project1/connection.yaml >> Table_Control.log >&1

p.s.

Agora funcionou bem, MAS eu não entendi porque se eu rodasse de script de shell - erros ausentes, MAS se executado a partir do cron job retornava erro não encontrei pedidos de módulo python ...

    
por 12.05.2018 / 18:35