結構前から、MySQLのサーバ(mysqld)が自動更新された後に自動起動せず※、不便な思いをしている。停まると使っている側(例: このブログ)がエラーになるので、ログインして手で起動する必要がある。
※推測だが、更新のスクリプトが間抜けで、更新後にうまく起動できないのではないか。
それが面倒なので、去年くらいから、crontabで定期的(10分ごと)にmysqldが起動しているかチェックし、していない時は起動するようにして居た。
ただ、ほとんどの場合は起動しているので、定期的にチェックするのは無駄だし、起動していない時に10分も待つのが嫌なので、以下のような自動起動処理を作った。
- 自動更新のログ(/var/log/apt/history.log)に、mysqldの更新が記録(追記)されるのを待つ。
- tail -F -c 0 ファイル名 | egrep --line-buffered パターン
- 少し(10秒)待つ。
- もしかしたら起動されるかも知れないので。
- mysqldが起動しているかチェックする。
- systemctl status サービス名
- 起動していない時は起動する。
- 処理の実行が分かるようにメールを出す。
- 1に戻る。
ある程度は動作確認したが、ちゃんと動くかは次回の更新まで確かめられない。
そしてデバッグする羽目になる?w
MySQLは(僕にしてみれば出来が悪く、)ことあるごとに面倒を起こすので止めたいのだが、互換性があって容易に移れるものがないので我慢している。
PS. 書いたあとで調べたら、mysqldのサービスファイル(/lib/systemd/system/mysql.service)の "Restart=on-failure" を以下に換えるといいようだ。
Restart = always
RestartSec = 10
何かの考えが あった(やっぱりサボりたい?w)のだろうが、MySQLのパッケージに原因があった。ただ、この問題は以前は起こっていなかったため、本当に上の変更でいいのか疑問があるので※、適用するのは保留する。
※妥当であることを確認するには、問題が起こっていなかった時のサービスファイルを「発掘」して比較するのだろうが、面倒だ。
↑ ちゃんと動いていた頃のサービスファイルの発掘はできなかったが、サーバのOSをUbuntu 20に更新した時(2020/11)にsystemd(サービスファイル)による管理に変わったので、その最初のサービスファイルから ずっと駄目だったのではないか。
(2/6 5:12 OSのバージョン記載漏れを修正)