bắt đầu nginx khi khởi động với systemd


18

Tôi vừa cài đặt nginx 1.9 trên máy chủ Debian 8. nginx đang hoạt động tốt, khi tôi bảo nó chạy, nhưng dường như nó sẽ không tự động tải nginx khi khởi động.

Tôi đã thử rất nhiều tập lệnh init được đề xuất trên internet, nhưng vẫn chưa có gì hoạt động. Vì vậy, bây giờ tôi đang cố gắng tìm ra nó với 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.

Thật không may, tôi không biết "dịch vụ bị che" nghĩa là gì và tôi không biết tại sao nó lại bị che.

khi tôi chạy

sudo nginx

Máy chủ chạy tốt. Vì vậy, sau đó, tôi đã tìm hiểu về dịch vụ nginx.

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

ok tuyệt, bây giờ tôi có thể bắt đầu nginx bằng systemctl. Vì vậy, tôi đã kiểm tra xem liệu khởi động lại sẽ tải nginx tự động. Nhưng nó không làm như vậy, và tôi không biết phải đi đâu từ đây.

Ai đó có thể giúp tôi có được nginx chạy tự động khi khởi động không?


6
systemctl enable nginx...
jasonwryan

Câu trả lời:


21

Bạn dường như nhầm lẫn kích hoạt, bắt đầu và mặt nạ hoạt động.

  • systemctl start, systemctl stop: bắt đầu (dừng) thiết bị được đề cập ngay lập tức ;
  • systemctl enable, systemctl disable: đánh dấu (bỏ đánh dấu) đơn vị để tự khởi động khi khởi động (theo cách thức đơn vị cụ thể, được mô tả trong [Install]phần của nó );
  • systemctl mask, systemctl unmask: không cho phép (cho phép) tất cả và mọi nỗ lực để khởi động thiết bị được đề cập (theo cách thủ công hoặc dưới dạng phụ thuộc của bất kỳ đơn vị nào khác, bao gồm cả các phụ thuộc của mục tiêu khởi động mặc định). Lưu ý rằng việc đánh dấu để tự khởi động trong systemd được thực hiện bằng cách thêm một phụ thuộc nhân tạo từ mục tiêu khởi động mặc định vào đơn vị được đề cập, vì vậy "mặt nạ" cũng không cho phép tự khởi động.

Vì vậy, tất cả đều là hoạt động riêng biệt. Trong số này, bạn muốn systemctl enable.

Tham chiếu: systemctl (1) .

Thêm: Lennart Poettering (2011/03/02). "Ba cấp độ tắt" . systemd cho Quản trị viên . 0pulum.de.


Tôi chỉ muốn nginx tải khi khởi động. Tôi nghĩ systemctl có thể giúp tôi tìm ra lý do tại sao nó không xảy ra.
j0h

@ j0h: Đọc lại câu trả lời của tôi. Tôi đã mô tả lý do tại sao nó không tự khởi động và phải làm gì để tự khởi động. Gợi ý: câu cuối cùng.
intelfx

Liên kết chuyển hướng đến một trang 404 và tôi đã sử dụng systemctl để kích hoạt nginx. Khi tôi khởi động lại, nó vẫn không chạy. có lẽ tôi nên thử systemctl phép nginx.service
j0h

1
@ j0h: Ý tôi là câu, không tham khảo. (BTW, xin lỗi vì liên kết bị hỏng - đã được sửa ngay bây giờ.) Và vâng, đọc lại nó một lần nữa, bạn cần systemctl enable(không systemctl start) để làm một cái gì đó bắt đầu khi khởi động.
intelfx

2

Đã sửa liên kết trong câu trả lời được chấp nhận để nó chuyển hướng đến đúng trang. Nhưng đây là một chút có liên quan:

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

nơi /lib/systemd/system/nginx.servicetrông giống như:

# 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

`

Sử dụng TERM thay vì QUIT để ngăn Nginx rời khỏi ổ cắm Unix cũ và không khởi động tiếp theo ( trac.nginx.org/nginx/ticket/753 )
nguy hiểm89

2

Đây là những gì làm việc cho tôi: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ub Ubuntu

Tôi đã bỏ qua hầu hết các tài liệu, cụ thể để biên dịch các phiên bản khác, của nginx, và chuyển sang "Make it Autostart".

Tôi đã làm theo chỉ dẫn ở đó và bây giờ khi tôi khởi động lại, nginx 1.9 đang chạy.

Tôi chắc chắn đánh giá cao sự giúp đỡ của mọi người, và cái nhìn sâu sắc. Cảm ơn tất cả!


4
Vui lòng không bỏ liên kết dưới dạng câu trả lời: thêm thông tin liên quan để câu trả lời không phụ thuộc vào tài nguyên bên ngoài ...
jasonwryan

4
Trong thực tế hiện nay các nguồn lực bên ngoài đã biến mất ... Xem nó trên web.archive: web.archive.org/web/20150328063215/https://longhandpixels.net/...
viết lại

1

từ tài nguyên nginx https://www.nginx.com/resource/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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.