私は組み込みハードウェアでカスタムYoctoバージョンのLinuxを実行しています。 nginxをインストールしましたが、正しく起動しません。
systemctl start nginx.service
失敗する
サービスを開始しようとすると、PIDファイルが正常に作成され、nginxが起動します(ブラウザを介して接続できます)。すべてが正常です。その後、失敗してnginxが停止し、PIDファイルが削除されます。
PIDファイルのPIDが正しいことを確認しました(約10秒間存在します)。
結果は次のとおりですjournalctl --xe
。
-- Unit nginx.service has begun starting up.
Mar 03 13:40:34 imx8mq-var-dart systemd[1]: nginx.service: Permission denied while opening PID file or unsafe symlink chain: /run/nginx/nginx.pid
Mar 03 13:42:04 imx8mq-var-dart systemd[1]: nginx.service: Start operation timed out. Terminating.
Mar 03 13:42:04 imx8mq-var-dart systemd[1]: nginx.service: Failed with result 'timeout'.
Mar 03 13:42:04 imx8mq-var-dart systemd[1]: Failed to start Nginx Server.
-- Subject: Unit nginx.service has failed
/lib/systemd/service/nginx.service
次のようになります。
[Unit]
Description=Nginx Server
After=network.target
[Service]
Type=forking
PIDFile=/run/nginx/nginx.pid
ExecStart=/usr/sbin/nginx
ExecStop=/usr/sbin/nginx -s stop
ExecReload=/usr/sbin/nginx -s reload
[Install]
WantedBy=multi-user.target
ディレクトリの権限は次のとおりです。
drwxr-xr-x 13 root root 340 Feb 27 14:42 /run
drwxr-xr-x 7 root root 140 Mar 3 13:42 /run/nginx
PIDファイルが存在するときの権限は次のとおりです。
-rw-r--r-- 1 root root 5 Mar 3 13:59 /run/nginx/nginx.pid
/runはtmpfsです。
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
ベストアンサー1
インストールされたサービスの削除
systemctl disable nginx
nginxサービスファイルをこのテンプレートに置き換えます。
# /etc/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
[Install]
WantedBy=multi-user.target