1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

cron + chrome + seleniumが動かない問題

Posted at

ubuntuアップデートからの悪夢

時々来る、アップデートのお知らせ

criticalの脆弱性だったはずだから、chromeアップデートしておかないと・・・と
127.0.6533.89へバージョンアップをした。
そのほかにも、ubuntuのパッチなども
※ubuntuは24.04を使用

そう、それは悪夢の始まり

cronが動かなくなったが、単体では普通に動く

ログを出してみた。

  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

色々調べると下記が必要だというが入っている。

chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")

別で調べて下記のように追加したが、このエラーかchromedriverからのタイムアウトエラーが出ていて、堂々巡りになってドはまり・・・

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")

+ chrome_options.add_argument("--disable-dev-shm-usage")

+ service = Service("/path/to/chromedriver")

(結局これは元のコードで問題なかった)

cronと普通のシェルの違い

envの環境設定がほぼない。PATHの設定などないといっていい。
おそらく、ここに問題があるが・・・何がどう絡んでいるのかは分からない。

cronの代替えはないものか!!!

cron代替え atコマンド!!

cronと違って、使い捨てのスケジュールコマンド。少々使い勝手が悪いが!
atコマンドをインストールしいざ実行

at -f  /path/to/shell.sh  00:00

これで次の0時に処理開始となる。

動いた!!!

これで安心だー!
って思ってcronで毎日1回動かしてスケジュールを入れさせてこれでオッケーだ!
ようやく解放された!!と安堵。

次の日、動いてなかった

動いてない!?どうしてなのか!
普通にシェルからatを起動して、動く・・・?
どうして?
と、少しばかりshellの内容を変更してみる。python→python3、ログ出力など(リンクしてるのでptyhon3でも変わらない)

と、at コマンドの使い方でみた -c コマンドを思い出す。
これは、コマンドの詳細を出すというもの。現在登録されているジョブを表示(cronで登録)

at -c  10 (ジョブ番号) 

#!/bin/sh
# atrun uid=1000 gid=1000
# mail XX 0
umask 2
HOME=/home/XX; export HOME
LOGNAME=XX; export LOGNAME
PATH=/home/XX/python_v/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin; export PATH
LANG=ja_JP.UTF-8; export LANG
PWD=/home/XX; export PWD
cd /home/XX || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
#/bin/sh
export DISPLAY=:0
export PATH="/home/XX/python_v/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin"
. /home/XX/python_v/bin/activate
python /home/XX/storage/selenium/exec.py

あ、これ環境変数まで入れて実行されてるんだ。
pathも入ってるし特段問題なし
あれ、さっき変更したptyhonコマンドが変更されてない?
その時スケジュールされた時の状態が保存されているのか

まてよ、cronで登録したものとシェルから登録したもので差があるのでは・・・?

と再度動かしてみました。ジョブ番号をメモ。

at -f  /path/to/shell.sh  00:00

コマンド内容を表示!

at -c  11 (ジョブ番号) 
#!/bin/sh
# atrun uid=1000 gid=1000
# mail XX 0
umask 2
SESSION_MANAGER=local/....; export SESSION_MANAGER
QT_ACCESSIBILITY=1; export QT_ACCESSIBILITY
COLORTERM=truecolor; export COLORTERM
XDG_CONFIG_DIRS=...; export XDG_MENU_PREFIX
:
:

cd /home/XX || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
#/bin/sh
export DISPLAY=:0
export PATH="/home/XX/python_v/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin"
. /home/XX/python_v/bin/activate
python /home/XX/storage/selenium/exec.py > /home/XX/at.log 2>&1

違う!!
その環境変数が全登録されていることに気が付きました。
(ということは、cronでの環境変数が見られたということになりますね。)
おそらく、cronも同じ方法で登録しているのかと思われます!

一番上のSESSION_MANAGERが怪しいと思いましたが、とりあえず環境変数部分を全部シェルに入れてスケジューラー登録!

動いた!!!
スケジュール一旦全削除してcronから登録!
動いた!!

結論 一旦全環境変数を設定してみましょう!

少々荒業ですが、これで解決しました。
すこしづつ環境変数を削れば見えてくるのではないかと!
(環境によって変わると思われるので、これさえあれば大丈夫ですとはいいません)
気力がなくて試してないですが、cronでも同じであると思われます。
シェルで動いてるのに、cronでは動かない。動かなくなった!という人は一度お試しください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?