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?