systemd를 사용하여 부팅 시 nginx 시작

systemd를 사용하여 부팅 시 nginx 시작

방금 Debian 8 서버에 nginx 1.9를 설치했습니다. nginx를 실행하라고 하면 제대로 작동하지만 시작 시 nginx를 자동으로 로드하지 않는 것 같습니다.

인터넷에서 권장하는 많은 초기화 스크립트를 시도했지만 아직 아무것도 작동하지 않았습니다. 이제 저는 이 문제를 해결하기 위해 systemctl을 사용하려고 합니다.

~$ systemctl status nginx
● nginx.service
   Loaded: masked (/dev/null)
   Active: inactive (dead)
~$ sudo systemctl try-restart nginx
Failed to try-restart nginx.service: Unit nginx.service is masked.
~$ sudo systemctl reload nginx
Failed to reload nginx.service: Unit nginx.service is masked.
~$ sudo systemctl reload nginx
Failed to reload nginx.service: Unit nginx.service is masked.

안타깝게도 "서비스 차단"이 무엇을 의미하는지, 왜 차단되는지 전혀 모르겠습니다.

내가 달릴 때

sudo nginx

서버가 훌륭하게 실행되고 있습니다. 그런 다음 nginx 서비스의 마스크를 해제하는 방법을 살펴보았습니다.

~$ sudo systemctl unmask nginx.service
Removed symlink /etc/systemd/system/nginx.service.

좋아, 이제 systemctl을 사용하여 nginx를 시작할 수 있습니다. 그래서 다시 시작하면 nginx가 자동으로 로드되는지 확인했습니다. 그러나 그것은 실패했고 나는 다음에 어디로 가야할지 몰랐습니다.

누군가 시작할 때 nginx가 자동으로 실행되도록 도와줄 수 있나요?

답변1

활성화, 실행 및 차단 작업을 혼동하는 것 같습니다.

  • systemctl start, systemctl stop: 시작(정지) 관련 유닛;
  • systemctl enable, systemctl disable: 단위 표시(표시 해제)부팅 시 자동으로 시작(해당 섹션에 설명된 단위별 방식으로 [Install])
  • systemctl mask, systemctl unmask: 연관된 유닛을 실행하려는 모든 시도를 허용하지 않습니다(수동으로 또는 기본 실행 대상의 종속성을 포함하여 다른 유닛의 종속성으로). systemd에서 자동 시작을 표시하는 것은 기본 실행 대상의 인위적 종속성을 관련 장치에 추가하여 수행되므로 "마스크"도 자동 시작을 허용하지 않습니다.

따라서 이것은 다른 작업입니다. 당신이 원하는 것 systemctl enable.

참조 번호:시스템 제어(1).

추가 정보: Lennart Poettering(2011-03-02). "세 가지 수준의 폐쇄". 관리자를 위한 시스템. 0pointer.de.

답변2

올바른 페이지로 리디렉션되도록 허용된 답변의 링크를 수정했습니다. 하지만 관련 내용은 다음과 같습니다.

sudo systemctl enable nginx.service
sudo systemctl start nginx.service
sudo systemctl status nginx.service

다음과 같습니다 /lib/systemd/system/nginx.service.

# 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=network.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

`

답변3

이것은 나에게 효과적입니다. https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

나는 특히 다른 버전의 nginx 컴파일에 관한 대부분의 문서를 무시하고 "자동으로 시작하도록 설정"했습니다.

거기의 지침을 따랐고 이제 재부팅하면 nginx 1.9가 실행 중입니다.

모든 분들의 도움과 통찰력에 진심으로 감사드립니다. 다들 감사 해요!

답변4

nginx 리소스에서https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

echo "
[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=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
" > /lib/systemd/system/nginx.service

관련 정보