Anaconda環境のcronでPythonコードを実行する

Anaconda環境のcronでPythonコードを実行する

特定のanaconda環境を使用してPythonスクリプトを実行し、1日に数回スクリプトを実行する必要があるため、これを行うには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が正しく機能する対話型環境とは異なることがわかります。クローンジョブ設定の一部は、ジョブが成功するように環境の側面を複製することです。

関連情報