저는 임베디드 하드웨어에서 맞춤형 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