`nginx -s` это то же самое, что `service nginx`?

`nginx -s` это то же самое, что `service nginx`?

Я заметил, что многие команды, такие как 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 startTomcat.

Чтобы обеспечить единообразный и автоматический способ запуска приложений, дистрибутивы предоставляют скрипты инициализации (или аналогичные), которые в новой версии Ubuntu представлены в трех вариантах:

  1. Современныйсистемд: systemctl <verb> nginx,
  2. Наследие (для Ubuntu)выскочка: service nginx <verb>,
  3. СтарейшийИнициализация 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) и видимость других частей системы (пространства имен), он настраивает процессвозможностии, вероятно, что-то еще.

Связанный контент