systemd, Raspbian 8(jessie)을 사용하여 nginx를 시작하시겠습니까?

systemd, Raspbian 8(jessie)을 사용하여 nginx를 시작하시겠습니까?

부팅 시 nginx를 시작하려고 하면 다음 오류가 발생합니다.Raspbian GNU/Linux 8 (jessie)

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: failed (Result: exit-code) since Sun 2016-08-07 10:38:50 EDT; 1min 10s ago
  Process: 478 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)

내 구성이 제대로 작동하고 로그인 후 nginx를 시작할 수 있지만 systemd에서 시작할 수는 없습니다.

이것은 내 유닛 파일입니다:

# Stop dance for nginx
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

/lib/systemd/system/nginx.service

그 후에 시작하려면 무엇을 달성해야 합니까? 나는 이것을 시도했지만 network-online.target(가장 합리적일 것임) 동일한 결과를 얻었습니다.

고쳐 쓰다

몇 가지를 바꿨습니다. 감사합니다이 게시물nginx를 시작해야 하는데...오류로 인해 여전히 실패합니다.

  1. /etc/systemd/system/mult-user.target.wants/nginx.service다음을 포함하도록 수정되었습니다 .
    1. After=network-online.target
    2. Wants=network-online.target
      1. 이전에 있었다After=network.target
  2. Ran sudo systemctl enable systemd-networkd-wait-online.service, 시작하려면 ( network-online.target활성화를 사용할 수 없으므로 sudo systemctl enable network-online.target)
  3. sudo systemctl enable nginx
  4. 재시작...
  5. 다시 시작한 후 파일을 실행 systemd-analyze plot > something.svg하고 검색 했는데 nginx.service거기에 있었지만 성공적으로 시작하는 대신 리버스 프록시 서버에 대한 오류가 발생했습니다. 문제를 해결하는 방법은 모르겠지만 다른 질문입니다.

아래는 systemd-analyze 그래프에서 얻은 이미지입니다.

systemd - 출력 분석...

하지만... 머신을 가동하고 실행한 후에는 sudo systemctl start nginx정상적으로 부팅되었습니다.

오류 로그의 오류 메시지는 다음과 같습니다.

2017/05/16 13:12:53 [emerg] 555#0: host not found in upstream "somehost.somedomain.lan" in /etc/nginx/sites-enabled/siteconf:41

문제가 있는 구성 라인은 다음과 같습니다.

server {
     listen     80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

    # Make site accessible from http://localhost/
    server_name somehost somehost.somedomain.lan;

    # Note: There should never be more than one root in a 
    #       virtual host
    #   Also there should never be a root in the location.
    #root /var/www/nginx/;

         location ^~ / {
            resolver 127.0.0.1 valid=300s; # NOTE: Added this to resolve it.
            access_log ./logs/RootWiki_access.log;
            error_log ./logs/RootWiki_error.log;
            proxy_buffers 16 4k;
            proxy_buffer_size 2k;
            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            rewrite /(.*) /$1 break;
            proxy_pass http://wiki.leerdomain.lan:8080; # NOTE: This one causes the error according to the error log.
        }

답변1

이 작업을 수행했습니다.

# Stop dance for nginx
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
After=multi-user.target
Requires=network-online.target


[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

해당 Unit섹션 아래에 다음을 추가했습니다.

[Unit]
# ...
After=multi-user.target
Requires=network-online.target

/lib/systemd/system/nginx.service

또한 bash에서 다음 명령을 실행했습니다.

$ sudo systemctl enable nginx

그런 다음 심볼릭 링크가 나타나는지 확인하세요.

$ ls -la /etc/systemd/system/multi-user.target/wants
...
lrwxrwxrwx  1 root root   33 May 14  2016 nginx.service -> /lib/systemd/system/nginx.service
...

그런 다음 데몬을 다시 로드합니다.

$ sudo systemctl daemon-reload

마지막으로 재부팅하고 거기에 있는지 확인하십시오.

$ sudo systemctl status --state active | grep nginx

이미지는 nginx.service가 다중 사용자 대상 뒤로 이동했음을 보여줍니다.

관련 정보