запустіть 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.

Літ . : systemctl (1) .

Детальніше: Леннарт Поетеринг (2011-03-02). "Три рівні вимкнення" . systemd для адміністраторів . 0pointer.de.


Я просто хочу, щоб nginx завантажувався під завантаження. Я думав, що systemctl може допомогти мені зрозуміти, чому цього не відбувається.
j0h

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

Посилання переспрямовує на сторінку 404, і я використовував systemctl для включення nginx. Коли я перезавантажився, він все ще не працював. можливо, я повинен спробувати systemctl enable 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, і перейшов до "Зробити автоматичний запуск".

Я дотримувався там інструкцій, і тепер, коли я перезавантажуюсь, працює 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.