Execute o código python do cron em um ambiente Anaconda

1

Eu preciso executar um script python usando um ambiente anaconda específico, já que eu preciso executar este script várias vezes por dia, eu gostaria de fazê-lo usando o arquivo linux crontab (/ etc / crontab).

Quando eu inicio o script pela linha de comando do Linux, ele funciona bem:

~/anaconda2/envs/py36/bin/python ~/production/web_scraping.py

Eu adicionei o processo ao arquivo crontab:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user  command
57 08 * * * user ~/anaconda2/envs/py36/bin/python ~/production/web_scraping.py | touch ~/test.txt

A linha é executada corretamente pelo cron, este é o log do cron:

user@exmachina:~$ sudo cat /var/log/syslog | grep web_*
Jan  2 08:57:02 localhost CRON[10854]: (user) CMD (~/anaconda2/envs/py36/bin/python ~/web_scraping.py | touch ~/test.txt) 

Eu adicionei | touch test.txt à linha do cron para garantir que a linha seja executada, e o arquivo test.txt é gerado.

O script python usa o Selenium para extrair dados de uma página da web, por meio do webdriver chrome. Esta pode ser a razão pela qual o script é executado bem na linha de comando, mas não no arquivo cron?

Obrigado pela sua ajuda!

    
por jordi vidal 02.01.2018 / 11:42

1 resposta

0

Em vez de | touch ~/test.txt , seria mais informativo usar | tee ~/test.txt (ou tee -a ).

Considere incorporar env|sort; id; date na saída que você registra.

Você foi bastante vago ao descrever o script de selênio e a maneira como ele "não roda bem" do cron. Todos os import s tiveram sucesso ou o PYTHONPATH talvez não esteja correto? Ajudaria a executar conda env update -f environment.yml e, em seguida, a tarefa cron source activate xxx , para que a tarefa extraísse as versões apropriadas da biblioteca?

Algumas variáveis, incluindo PATH e LD_LIBRARY_PATH, podem ser importantes para o seu navegador, e quando você visualiza os valores registrados, você pode ver que eles diferem do ambiente interativo onde o selênio está funcionando bem. Parte da configuração de um cron job está copiando aspectos do ambiente para que o trabalho seja bem-sucedido.

    
por 07.01.2018 / 00:41