mind.

学んだことの記録

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の公式ページに書かれていました。

docs.gitlab.com

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-waitrunningのまま止まっていました。

plymouthとは

plymouthはシステム起動時および終了時のスプラッシュを表示するソフトだそうです。

access.redhat.com

調べると、下記ページのようにアンインストールすることで解決できると書かれていました。

www.hiroom2.com

しかし、業務で使用しているということもあり極力既存のモジュールをアンインストールしたくはありませんでした。

解決策

GUIモードで起動しようとして止まっているので、CUIモードに切り替えると解決しました。

systemctl isolate multi-user.target

access.redhat.com

念のためキューを確認します。

# systemctl list-jobs
No jobs running.

# systemctl -t targetを実行するとrunningのままのサービスはありませんでした。

感想

正直危なかった……。先輩に教えてもらえなかったら解決できてなかったかもしれません。感謝です。
そろそろLPICとか取った方がいいのかとも思いました。