Я заметил, что многие команды, такие как nginx -s reload
и , nginx -s stop
кажутся (почти?) такими же, как service nginx reload
и service nginx stop
.
Являются ли эти "префиксы" взаимозаменяемыми? Один из них каким-то образом вызывает другой?
решение1
Поскольку вы используете Ubuntu 18.04 (т.е. последний дистрибутив Linux), я могу предложить третий вариант«псевдоним»команда: systemctl reload nginx
и /etc/init.d/nginx reload
.
Вся история такова: каждый сервер/приложение имеет свой собственный способ запуска, остановки, перезагрузки и т. д. Это может быть что-то простое, например вызов, nginx
или что-то сложное, например установка нескольких переменных среды и вызов java <a_lot_of_options> org.apache.catalina.startup.Bootstrap start
Tomcat.
Чтобы обеспечить единообразный и автоматический способ запуска приложений, дистрибутивы предоставляют скрипты инициализации (или аналогичные), которые в новой версии Ubuntu представлены в трех вариантах:
- Современныйсистемд:
systemctl <verb> nginx
, - Наследие (для Ubuntu)выскочка:
service nginx <verb>
, - СтарейшийИнициализация SysV:
/etc/init.d/nginx <verb>
.
На Убунтусистемдявляется фактически запущенным, в то время как другие вызываютсистемд. Конфигурация ( /lib/systemd/system/nginx.service
файл) для nginx содержит:
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
Так:
systemctl reload nginx
вызываетnginx -s reload
, но с дополнительной опцией-g 'daemon on; master_process on;'
, которая переопределяет эти две опции конфигурации,systemctl stop nginx
использует вспомогательную программуstart-stop-daemon
для контроляnginxshutdown. Эта программа отправитSIGQUIT
сигнал nginx, который является тем же самым , что иnginx -s quit
, подождет 5 секунд и, если nginx все еще работает, сообщит об ошибке.
В общем случае лучше использовать systemctl <verb> <service>
команды, а не запускать приложения самостоятельно.
Редактировать: На самом делесистемдделает гораздо больше, чем просто выполняет команду: он подключает свой вход/выход кsystemd-журнал, он ограничивает ресурсы, находящиеся в его распоряжении (cgroups) и видимость других частей системы (пространства имен), он настраивает процессвозможностии, вероятно, что-то еще.