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

# 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では動かない。動かなくなった！という人は一度お試しください。