PCの再起動時にplymouthが止まってGitLabが起動しなかった件
困った……
仕事で使っているGitLabのサーバーPCを再起動した後、いつも通りブラウザでページを開こうとするとエラー画面が表示されました。
サーバーにSSHで入って状態を見ると、GitLabとそれに関わるプロセスが起動していませんでした。
設定は、システム起動時に自動的に起動するようにしていたにも関わらず起動できないとはむむむ……。
とりあえずGitLabの起動コマンドを打ってみたものの失敗しました。
gitlab-ctl start
下記記事と現象は同じでした。
writesnow.net
$ sudo gitlab-ctl start fail: alertmanager: runsv not running fail: gitaly: runsv not running fail: gitlab-monitor: runsv not running fail: gitlab-workhorse: runsv not running fail: logrotate: runsv not running fail: nginx: runsv not running fail: node-exporter: runsv not running fail: postgres-exporter: runsv not running fail: postgresql: runsv not running fail: prometheus: runsv not running fail: redis: runsv not running fail: redis-exporter: runsv not running fail: registry: runsv not running fail: sidekiq: runsv not running fail: unicorn: runsv not running
上記ページには解決策も書かれていますが、僕の環境では下記コマンドを実行しても反応が無いという状況でした。
systemctl start gitlab-runsvdir
その他、Rubyのバージョンを確認したりもしましたが、僕が使っていたGitLabはOmnibus packageでインストールしたので関係ありませんでした。
結論
plymouth-quit-waitが動き続けていたため他のプロセスが起動できなかったことが原因でした。
(GitLab依存の問題ではありませんでしたので、影響は他のアプリにもあったかもしれません)
原因の特定に至った過程
この現象についてGitLabの公式ページに書かれていました。
Since GitLab 11.2, the gitlab-runsvdir starts during the multi-user.target instead of basic.target. If you are having trouble starting this service after upgrading GitLab, you may need to check that your system has properly booted all the required services for multi-user.target via the command:
つまり、誰かがGitLabに必要なサービスの起動を妨げているようです。
公式ページに従って、妨げているサービスを確認します。
systemctl -t target
このとき、loaded inactive dead
となっているサービスが二つありました。
(抜粋)
graphical.target loaded inactive dead start Graphical Interface multi-user.target loaded inactive dead start Multi-User System
この二つが原因のようです。
前述の公式ページに書かれている通り、次のコマンドでsystemdのキューを確認します。
systemctl list-jobs
結果(抜粋)
plymouth-quit-wait.service start running
plymouth-quit-wait
がrunning
のまま止まっていました。
plymouthとは
plymouthはシステム起動時および終了時のスプラッシュを表示するソフトだそうです。
調べると、下記ページのようにアンインストールすることで解決できると書かれていました。
しかし、業務で使用しているということもあり極力既存のモジュールをアンインストールしたくはありませんでした。
解決策
GUIモードで起動しようとして止まっているので、CUIモードに切り替えると解決しました。
systemctl isolate multi-user.target
念のためキューを確認します。
# systemctl list-jobs No jobs running.
# systemctl -t target
を実行するとrunning
のままのサービスはありませんでした。
感想
正直危なかった……。先輩に教えてもらえなかったら解決できてなかったかもしれません。感謝です。
そろそろLPICとか取った方がいいのかとも思いました。