目次
目的
先日、cronでseleniumを用いたPythonのスクリプトを定期実行したかったのですが、なかなか沼にハマったため手順を少しまとめておきます。
結論
DISPLAYを記述してあげましょう。
crontabって?
簡単にいうとUNIX系のOSで使える、定期実行のための便利なコマンドです。
crontab -e
コマンドで設定できます。
$ crontab -e
この辺の操作は調べたらいくらでも出てくると思うので割愛します。
設定してみると...
適当にPythonのスクリプトを書いて設定してみます。
import datetime
now = datetime.datetime.now()
date_string = now.strftime("%Y-%m-%d %H:%M:%S")
print(date_string)
* * * * * /usr/bin/python /home/test/Desktop/test.py >> /home/test/cron.log 2>&1
動くかと思いきや、、、動きません。
どうやらcrontabにはパスをちゃんと書いてあげる必要があるようです。
$ echo $PATH
/usr/local/sbin:...
これを書いてあげます。
PATH=/usr/local/sbin:...
* * * * * /usr/bin/python /home/test/Desktop/test.py >> /home/test/cron.log 2>&1
するとちゃんと動きました!
必要そうな環境変数はちゃんと渡してあげたほうがいいですね。
seleniumを用いたスクリプトを設定してみる
ではseleniumを用いたスクリプトを指定してみましょう。
適当にテスト用のスクリプトを用意してみます。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.google.com")
driver.quit()
すると、、、、動かない。
うんともすんとも言いません。
色々調べてみると、DISPLAYも書いてあげる必要があるようです。
というのも、環境変数のDISPLAYがブラウザの表示に必要なようです。全然知らなかったです。
調べてみます。
$ env | grep DISPLAY
DISPLAY=:0
ちゃんと書いてみます。
PATH=/usr/local/sbin:...
DISPLAY=:0
* * * * * /usr/bin/python /home/test/Desktop/test.py >> /home/test/cron.log 2>&1
ようやく動きました!!!!!!
というわけで、cronでselenium(に限った話ではないですが)を定期実行したいときはちゃんと環境変数を渡しましょうというお話でした。