web-dev-qa-db-ja.com

nginx.service:PIDファイル/ run / nginxを開けません

私はUbuntu 18.10で、vmwareの下で実行していて、nginxサービスを開始できません-「nginx.service:Ca n't open PID file/run/nginx」というエラーが表示されます。

乗客を使用してソースからnginxをコンパイルしました。 1台のマシンでは問題ありませんでしたが、私のvmでそれを試してもnginxサービスを開始できません。 PIDファイルを開けない(または作成できない)ため、上記のエラーが発生します。 systemctl enable&startを実行するとハングします。

/etc/sytemd/system/nginx.serviceスクリプトを次のように使用しました:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

/ runを/ var/runに置き換えてみましたが、同じエラーが発生します。

Nginx.confにはPIDへの参照はありません(必要があるとは思いませんか?)。

誰かが私にこれをトラブルシューティングまたは修正する方法の指針を教えてもらえますか?

1
tentimes

私はこれを修正する方法という意味で答えがありますが、誰かがこれがそうである理由についてコメントすることができるように、少しだけ開いたままにしておきます。

PID行を変更して、インストールされたnginxフォルダーのログフォルダー(/ opt/nginx/logs)にPIDファイルが書き込まれるようにしました。他の場所では、PIDファイルの書き込みが拒否されます!!!

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

私はこの動作の理由が何であるかわからないので、Ubuntu Linuxの専門家が、通常の実行場所/ runおよび/ var/run(またはtmp)たとえば、プログラムのすべての引用された起動スクリプトでは通常です。これはソースから作成された場合にのみ発生すると思います。

0
tentimes

あなたの質問を偶然見つけ、短い答えを残そうと考えました:

SystemdはitsefによってPIDファイルを作成しません。実行可能ファイルがそれを作成することを期待しています(通常、/run内、または特にUbuntuの場合は/var/runフォルダー内)。 Systemdは、サービスの開始後に作成されたかどうかのみをチェックします。また、サービスを強制終了すると、PIDファイルも削除されます。 参考

フォークプロセスとしてのNginxサーバーは、PIDファイルの作成をサポートしています。その場所を変更するには、標準パッケージのnginx.confフォルダにある/etc/nginxファイルでpidディレクティブを使用できます。このpidディレクティブのデフォルトはlogs/nginx.pidです。 参考

Nginxサービスを手動で作成する場合は、Systemd nginx.serviceファイル内とNginx nginx.conf構成ファイル内の両方の場所が一致していることを確認する必要があります。

2
Mario Steinitz

/ runは利用できますか?/runにcdしてファイルにタッチできますか?

cd /run && touch hello.txt && ls -lash

そうでない場合は、おそらくnginxがPIDファイルを使用できない場所に配置することを意味します。 2つのことができます。

  1. / runが利用できない理由を理解する(おそらくtmpfs構成)
  2. PIDファイルを別の場所、たとえば/ tmpに置きます
1
Aike de Jongste