Anaconda 환경의 cron에서 Python 코드 실행

Anaconda 환경의 cron에서 Python 코드 실행

특정 아나콘다 환경을 사용하여 Python 스크립트를 실행해야 하며 하루에 여러 번 스크립트를 실행해야 하기 때문에 이 작업을 수행하려면 Linux crontab 파일(/etc/crontab)을 사용하고 싶습니다.

Linux 명령줄에서 스크립트를 실행하면 정상적으로 작동합니다.

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

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

이 줄은 cron에 의해 올바르게 실행됩니다. 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) 

| touch test.txt라인이 실행되는지 확인하기 위해 cron 라인에 추가했으며 ,테스트.txt파일이 생성되었습니다.

python 스크립트는 Selenium을 사용하여 Chrome webdriver를 통해 웹 페이지에서 데이터를 추출합니다. 이것이 스크립트가 명령줄에서는 제대로 실행되지만 cron 파일에서는 실행되지 않는 이유일까요?

당신의 도움을 주셔서 감사합니다!

답변1

대신 (또는)을 사용하면 | touch ~/test.txt더 많은 정보를 얻을 수 있습니다.| tee ~/test.txttee -a

env|sort; id; date기록된 출력에 통합하는 것을 고려해보세요 .

셀레늄 스크립트에 대한 설명과 cron에서 "제대로 작동하지 않는" 방식이 매우 모호합니다. 모든 것이 import성공했습니까, 아니면 PYTHONPATH가 잘못되었을 수 있습니까? 작업이 적절한 라이브러리 버전을 가져오도록 conda env update -f environment.ymlcron 작업을 실행 한 다음 실행하는 것이 도움이 될까요?source activate xxx

PATH 및 LD_LIBRARY_PATH를 포함한 일부 변수는 브라우저에 중요할 수 있으며, 기록된 값을 보면 Selenium이 제대로 작동하는 대화형 환경과 다르다는 것을 알 수 있습니다. 크론 작업 설정의 일부는 작업이 성공할 수 있도록 환경의 측면을 복제하는 것입니다.

관련 정보