Debian

使用 systemd 在啟動時啟動 nginx

  • February 5, 2021

我剛剛在 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 在啟動時自動執行嗎?

您似乎混淆了啟用、啟動和屏蔽操作。

  • systemctl start, :立即systemctl stop啟動(停止)相關單元;
  • systemctl enable, systemctl disable: 標記(取消標記)引導時自動啟動的單元(以特定於單元的方式,在其[Install]部分中描述);
  • systemctl mask, systemctl unmask: 禁止(允許)所有和任何啟動相關單元的嘗試(手動或作為任何其他單元的依賴項,包括預設引導目標的依賴項)。請注意,systemd 中的自動啟動標記是通過將預設啟動目標的人為依賴項添加到相關單元來實現的,因此“遮罩”也不允許自動啟動。

所以,這些都是不同的操作。其中,你想要systemctl enable.

參考:systemctl(1)

更多:Lennart Poettering (2011-03-02)。 “三關”systemd 用於管理員。0pointer.de。

修復了已接受答案中的連結,使其重定向到正確的頁面。但這裡有一個相關的位:

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

`

引用自:https://unix.stackexchange.com/questions/204441