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パスを変更」を参照してください。
2020/06/03追記
【現象】
【この現象が起きる前にやったこと】
【試した事】
【分かった事】
# less /var/log/messages
カゴヤVPSではデフォルトでIPv6は無効状態(参考: IPv6 の利用 - KAGOYA Internet Routing)。
なので、OSレベルでIPv6を無効にしてみる。
# vi /etc/sysctl.d/disable_ipv6.conf
再起動
# reboot
同じ現象。
postfixも起動時にエラー出るようになったので、元に戻して再起動。
設定ファイルのPIDのパスを「/var/run/nginx.pid」から「/run/nginx.pid」変更する。
# less /usr/lib/systemd/system/nginx.service
# less /etc/nginx/nginx.conf
# systemctl daemon-reload
# systemctl start nginx
無事起動した!
同じようにopendkimも変更して再起動
# reboot
他に自動起動してないサービスがあるか確認
# systemctl list-units
下記サービスは失敗している。
おそらくOpen VZ上だから。
稼働中のプロセス一覧
# ps ax
【関連記事】
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パスを変更」を参照してください。
2020/06/03追記
下記サイトによるとカーネルをアップデートすることで直るらしい。
OpenVZだとカーネルが共通なのでホストのカーネルで対応する必要がありそう。
ダメ元でカゴヤのサポートに問合せしてみたら全く見当違いの回答だったので、別のホスティングへ乗り換えることにした。
【現象】
- 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.pidnginx.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
【関連記事】