สตาร์ท nginx เมื่อบู๊ตด้วย systemd


18

ฉันเพิ่งติดตั้ง nginx 1.9 บนเซิร์ฟเวอร์ Debian 8 nginx ทำงานได้ดีเมื่อฉันบอกให้ทำงาน แต่ดูเหมือนว่าจะไม่โหลด nginx โดยอัตโนมัติเมื่อบูต

ฉันได้ลองใช้สคริปต์ init หลาย ๆ ตัวที่แนะนำบนอินเทอร์เน็ต แต่ยังไม่ได้ผล ดังนั้นตอนนี้ฉันกำลังพยายามหามันด้วย 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.

เยี่ยมยอดตอนนี้ฉันสามารถเริ่ม nginx โดยใช้ systemctl ดังนั้นฉันจึงตรวจสอบเพื่อดูว่าการรีบูตจะโหลด nginx โดยอัตโนมัติหรือไม่ แต่มันล้มเหลวในการทำเช่นนั้นและฉันไม่รู้ว่าจะไปจากที่นี่ได้อย่างไร

ใครสามารถช่วยฉันให้ nginx ทำงานโดยอัตโนมัติขณะบู๊ต


6
systemctl enable nginx...
jasonwryan

คำตอบ:


21

ดูเหมือนว่าคุณจะสับสนเปิดใช้งานเริ่มต้นและปิดบังการทำงาน

  • systemctl start, systemctl stop: เริ่ม (หยุด) หน่วยที่มีปัญหาทันที ;
  • systemctl enable, systemctl disable: ทำเครื่องหมาย (ไม่ทำเครื่องหมาย) หน่วยสำหรับการเริ่มอัตโนมัติในเวลาบูต (ในลักษณะเฉพาะหน่วย, อธิบายไว้ใน[Install]ส่วนของมัน);
  • systemctl mask, systemctl unmask: ไม่อนุญาต (อนุญาต) ทั้งหมดและความพยายามใด ๆ ในการเริ่มหน่วยที่สงสัย (ไม่ว่าจะด้วยตนเองหรือเป็นการพึ่งพาของหน่วยอื่นใดรวมถึงการขึ้นต่อกันของเป้าหมายการบูตเริ่มต้น) โปรดทราบว่าการทำเครื่องหมายสำหรับการเริ่มอัตโนมัติใน systemd นั้นถูกนำไปใช้โดยการเพิ่มการพึ่งพาเทียมจากเป้าหมายการบูตเริ่มต้นไปยังหน่วยที่สงสัยดังนั้น "หน้ากาก" ก็ไม่อนุญาตให้ทำการเริ่มอัตโนมัติ

ดังนั้นทั้งหมดนี้เป็นการดำเนินการที่แตกต่างกัน systemctl enableของเหล่านี้ที่คุณต้องการ

Ref .: systemctl (1)

เพิ่มเติม: Lennart Poettering (2011-03-02) "สามระดับของการปิด" systemd สำหรับผู้ดูแลระบบ 0pointer.de


ฉันแค่อยากให้ nginx โหลดตอนบูท ฉันคิดว่า systemctl สามารถช่วยฉันหาสาเหตุว่าทำไมมันไม่เกิดขึ้น
j0h

@ j0h: อ่านคำตอบของฉันอีกครั้ง ฉันได้อธิบายว่าทำไมมันไม่เริ่มอัตโนมัติและจะทำอย่างไรเพื่อให้เริ่มอัตโนมัติ คำแนะนำ: ประโยคสุดท้าย
intelfx

ลิงก์เปลี่ยนเส้นทางไปยังหน้า 404 และฉันใช้ systemctl เพื่อเปิดใช้งาน nginx เมื่อฉันรีบูตเครื่องมันยังคงไม่ทำงาน บางทีฉันควรลอง systemctl เปิดใช้งาน nginx.service
j0h

1
@ j0h: ฉันหมายถึงประโยคไม่ใช่การอ้างอิง (BTW, ขอโทษที่เสียลิงค์ - แก้ไขแล้ว) และใช่อ่านอีกครั้งคุณต้องการsystemctl enable(ไม่ใช่systemctl start) เพื่อเริ่มบางสิ่งในการบู๊ต
intelfx

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

`

ใช้ TERM แทน QUIT เพื่อป้องกันไม่ให้ Nginx ออกจากซ็อกเก็ต Unix ที่ค้างและล้มเหลวในการเริ่มต้นครั้งถัดไป ( trac.nginx.org/nginx/ticket/753 )
อันตราย 89

2

นี่คือสิ่งที่ทำงานให้ฉัน: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

ฉันเพิกเฉยต่อเอกสารส่วนใหญ่ซึ่งเฉพาะในการคอมไพล์เวอร์ชันอื่นของ nginx และไปที่ "Make it Autostart"

ฉันทำตามคำแนะนำที่นั่นและตอนนี้เมื่อฉันรีบูต nginx 1.9 กำลังทำงาน

ฉันขอขอบคุณความช่วยเหลือจากทุกคนและข้อมูลเชิงลึก ขอบคุณทุกคน!


4
กรุณาอย่าเพียงวางการเชื่อมโยงเป็นคำตอบ: เพิ่มข้อมูลที่เกี่ยวข้องเพื่อให้คำตอบคือไม่ขึ้นอยู่กับทรัพยากรภายนอก ...
jasonwryan

4
อันที่จริงตอนนี้ทรัพยากรภายนอกหายไป ... ดูได้ที่ web.archive: web.archive.org/web/20150328063215/https://longhandpixels.net/ …
เขียนใหม่

1

จากแหล่งข้อมูล 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.