Can't open PID file /var/run/nginx.pid (yet?) after start: Too many levels of symbolic links

下記エラーになってハマった時の覚書。

systemd[1]: Can't open PID file /var/run/nginx.pid (yet?) after start: Too many levels of symbolic links

環境: Kagoya VPS(Open VZ), CentOS 7.7, nginx 1.16.1


yum updateするとこの現象が起きるらしい。
カゴヤのサポートに問い合わせてみたところ「最近 CentOS の systemd 周りの更新があったようで、yum update によりおっしゃる状況となることがあるようです。」とのこと。
答えが知りたい方は途中読み飛ばして、「systemd設定ファイルのPIDパスを変更」を参照してください。



【現象】
  • nginxが自動起動しない
  • systemctl start nginxを実行しても上記エラーで起動しない
  • 開発環境の仮想マシン(ほぼ同じ環境)では起こらない。カゴヤVPS上で起こる。
  • OpenDKIMも自動起動していない
  • MariaDBは無事起動している
  • 再起動直後は自動起動するが上記エラーで止まる。



【この現象が起きる前にやったこと】
  • yum update
  • phpを7.2から7.3へアップデート



【試した事】
  • nginxの再インストール
  • phpの再インストール



【分かった事】
  • 直接「/usr/sbin/nginx -c /etc/nginx/nginx.conf」を実行すると起動できる。
  • systemdが何かおかしい気がする(?)



IPv6を疑う(←意味なかった)

/var/run/は/run/にシンボリックリンクを貼ってるけど、今まで大丈夫だったし別の仮想環境で問題ないから、環境周りの原因からと思い、もう一度サーバーのエラーログを眺める
# less /var/log/messages
systemd: Binding to IPv6 address not available since kernel does not support IPv6.
このエラーが気になった。
カゴヤVPSではデフォルトでIPv6は無効状態(参考: IPv6 の利用 - KAGOYA Internet Routing)。
なので、OSレベルでIPv6を無効にしてみる。
# vi /etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

再起動
# reboot

同じ現象。
postfixも起動時にエラー出るようになったので、元に戻して再起動。


systemd設定ファイルのPIDパスを変更

systemdが参照する「/usr/lib/systemd/system/」の中身にヒントがあるかもしれない。
設定ファイルのPIDのパスを「/var/run/nginx.pid」から「/run/nginx.pid」変更する。
# less /usr/lib/systemd/system/nginx.service
PIDFile=/run/nginx.pid
nginx.confも変更する
# less /etc/nginx/nginx.conf
pid        /run/nginx.pid;
設定ファイルを再読み込みして起動
# systemctl daemon-reload
# systemctl start nginx

無事起動した!
同じようにopendkimも変更して再起動
# reboot

他に自動起動してないサービスがあるか確認
# systemctl list-units

下記サービスは失敗している。
おそらくOpen VZ上だから。
  • quotaon.service
  • systemd-sysctl.service
  • systemd-vconsole-setup.service
  • vzquota.service


稼働中のプロセス一覧
# ps ax



【関連記事】


コメント

このブログの人気の投稿

オンサイトサポートとは(=出張サポート)

スタートアップで起動するアプリを停止する方法

既存のディレクトリ(フォルダ)にgit cloneして上書きしたい