запустить nginx при загрузке с systemd


18

Я только что установил nginx 1.9 на сервер Debian 8. 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.

Хорошо, теперь я могу запустить nginx с помощью systemctl. Поэтому я проверил, будет ли перезагрузка автоматически загружать nginx. Но этого не происходит, и я понятия не имею, куда идти отсюда.

Может кто-нибудь помочь мне автоматически запустить nginx при загрузке?


6
systemctl enable nginx...
Джейсонвриан

Ответы:


21

Вы, кажется, путаете операции включения, запуска и маскирования.

  • systemctl start, systemctl stop: запускает (останавливает) данный блок немедленно ;
  • systemctl enable, systemctl disable: помечает (снимает отметки) модуль для автоматического запуска во время загрузки (в зависимости от модуля , как описано в его [Install]разделе);
  • systemctl mask, systemctl unmask: запрещает (разрешает) все и любые попытки запуска рассматриваемого модуля (либо вручную, либо как зависимость от любого другого модуля, включая зависимости цели загрузки по умолчанию). Обратите внимание, что пометка для автозапуска в systemd реализована путем добавления искусственной зависимости от цели загрузки по умолчанию к рассматриваемому модулю, поэтому «маска» также запрещает автозапуск.

Итак, все это разные операции. Из них вы хотите systemctl enable.

Ссылка: systemctl (1) .

Подробнее: Леннарт Поэттеринг (2011-03-02). «Три уровня выключения» . systemd для администраторов . 0pointer.de.


Я просто хочу, чтобы nginx загружался при загрузке. Я думал, systemctl может помочь мне понять, почему этого не происходит.
2015 года

@ j0h: перечитайте мой ответ еще раз. Я описал, почему он не запускается автоматически и что нужно сделать, чтобы он запускался автоматически. Подсказка: последнее предложение.
intelfx

Ссылка перенаправляет на страницу 404, и я использовал systemctl для включения nginx. Когда я перезагрузился, он все еще не работал. возможно я должен попробовать systemctl включить nginx.service
j0h

1
@ j0h: я имел в виду предложение, а не ссылку. (Кстати, извините за неработающую ссылку - исправлено.) И да, перечитайте это еще раз, вам нужно 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 )
danger89

2

Вот что сработало для меня: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

Я проигнорировал большую часть документа, относящегося к компиляции других версий nginx, и перешел к «Сделать автозапуском».

Я следовал указаниям там, и теперь, когда я перезагружаюсь, 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.