trabalho cron para ser executado em ambiente virtual conda

0

Eu tenho um ambiente virtual do Anaconda Python configurado e, se eu executar meu projeto enquanto o ambiente virutal estiver ativado, tudo funcionará muito bem.

Mas eu tenho um cronjob configurado para executá-lo a cada hora. Eu canalizei a saída para um log porque ele não estava sendo executado corretamente.

crontab -e :

10 * * * * bash /work/sql_server_etl/src/python/run_parallel_workflow.sh >> /home/etlservice/cronlog.log 2>&1

Eu recebo este erro no cronlog.log:

Traceback (most recent call last):
  File "__parallel_workflow.py", line 10, in <module>
    import yaml
ImportError: No module named yaml

Isso é indicativo de que o cronjob de alguma forma não está executando o arquivo sem o ambiente virtual ativado.

Para corrigir isso, adicionei uma linha ao arquivo /home/user/.bash_profile :

conda activate ~/anaconda3/envs/sql_server_etl/

Agora, quando faço o login, o ambiente é ativado automaticamente.

No entanto, o problema persiste.

Eu tentei mais uma coisa. Eu mudei o cronjob (e também tentei isso no arquivo bash que o cronjob executa) para ativar manualmente o ambiente explicitamente toda vez que ele é executado, mas sem sucesso:

10 * * * * conda activate ~/anaconda3/envs/sql_server_etl/ && bash /work/sql_server_etl/src/python/run_parallel_workflow.sh >> /home/etlservice/cronlog.log 2>&1

Claro, nada que eu tentei consertou. Eu realmente não sei nada sobre o Linux, então talvez haja algo óbvio que eu preciso mudar.

Então, existe alguma maneira de especificar que o cronjob deve ser executado em um ambiente virutal?

    
por Legit Stack 12.07.2018 / 20:37

1 resposta

0

Resposta encontrada na pilha sobre o fluxo:

link

A solução é fazer referência ao executável python no próprio ambiente virtual. No meu caso, eu mudei o arquivo bash para executar este executável:

/home/etlservice/anaconda3/envs/sql_server_etl/bin/python

    
por 12.07.2018 / 20:51