特定の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.txt
tee -a
env|sort; id; date
記録された出力に統合することを検討してください。
セレンスクリプトの説明とcronの「正しく動作しない」方法は非常にあいまいです。すべてがimport
成功しましたか、それともPYTHONPATHが間違っている可能性がありますか?ジョブが適切なライブラリバージョンを取得するようにconda env update -f environment.yml
cronジョブを実行してから実行すると便利ですか?source activate xxx
PATHやLD_LIBRARY_PATHを含む一部の変数はブラウザにとって重要である可能性があり、記録された値を見るとSeleniumが正しく機能する対話型環境とは異なることがわかります。クローンジョブ設定の一部は、ジョブが成功するように環境の側面を複製することです。