Существует ли стандартный способ запуска и остановки служб в Linux?

15

До недавнего времени существовал простой и эффективный способ запуска / остановки / перезапуска служб:

service nginx start|stop|restart

Это прекрасно работало в течение многих лет, пока некоторые умные штаны не решили улучшить их, и теперь я сталкиваюсь с системами Debian / Ubuntu, где serviceскрипт ничего не делает (так как я должен использовать такие вещи, как systemctl start nginx.service(гораздо дольше, нет автоматического завершения работы, ...)

Мой вопрос касается специально Debian и Ubuntu, но было бы также полезно рассмотреть дистрибутивы CentOS / RedHat.

Итак, есть ли что-то, что может спасти меня от этих обреченных изменений?

В случае, если это было неясно, я ищу последовательный способ справиться с тем, который будет работать на Debian 7.x, 8.x, последних версиях Ubuntu LTS и non-LTS.

PS. Вне рамок этого конкретного вопроса, но дополнительные плюсы предоставляются, если решение будет также включать в себя включение и отключение части для служб.

Сорин
источник
5
Завершение табуляции работает для systemctl для меня ... И, нравится нам это или нет, systemd теперь является стандартом де-факто: с таким же успехом можно привыкнуть
Джейсонвриан
1
Дополнительно: если служебная команда стала бесполезной, могу ли я удалить ее? Какой пакет это обеспечивает?
Сорин
3
Нет смысла заменять старую serviceкоманду оболочкой, которая вместо этого вызывает servicectl?
Сорин
4
@jasonwryan Да, но вы также можете сделать это , и обертка может с этим справиться, что сделает переход на systemd более плавным для пользователей.
Дмитрий Григорьев
2
Неужели serviceдля тебя ничего не происходит? Он работает, как и ожидалось, на моем LMDE (это в основном тестирование Debian), я не думал, что это было специфично для LMDE. Это также работает, как и ожидалось в моей Ubuntu VM.
Тердон

Ответы:

6

На протяжении всей запутанной истории на различных платформах Unix существовало множество различных систем управления загрузкой и службами.

service\chkconfigСистема , основанная вы нашли простой и эффективный , как правило , называют SysVinit стиле и является важным шагом на пути к какой - то стандартизации. Этот стиль загрузки вы найдете в RHEL / CentOS (EL) до 6-го выпуска, от Fedora до 14 и в дистрибутивах на основе Debian / Ubuntu вплоть до 2015 года. Хотя это была не единственная система загрузки во всем, (более простой) стиль BSD Система init все еще имеет много поклонников.

SysVinit не был идеальным решением (что есть?), И Systemd был разработан для преодоления многих проблем; это systemctlсистема, основанная на командах, которую вы сейчас испытываете. Несмотря на то, что он не всем нравится (люди ненавидят изменения, раздувают и т. Д.), Нет сомнений, что он быстро становится стандартом де-факто в большинстве дистрибутивов.

Поэтому, глядя немедленно направить ответ на свой первоначальный вопрос просто: стандартный способ управления услугами через большинство дистрибутивов Linux сейчас ! Как долго это будет сохраняться, можно только догадываться; вероятно, только до тех пор, пока не появится что-то лучшее и широко распространенное.
systemctl

Я уверен, что будут доступны обертки, позволяющие вашим любимым service/chkconfigкомандам продолжать делать в основном нормальные вещи, но с этой конкретной кривой обучения, вероятно, лучше не бороться с этим. Может быть, с нетерпением жду, на какое-то время появятся также systemctlобертки для старых систем, чтобы сделать управление ими вместе с более современными менее болезненными;)

DanSut
источник
А до этого был xinetd, а до этого был inetd
jas-
@ jas- Я думаю, что inetd сами по себе являются сервисами, я считаю, что они могут существовать во всех загрузочных системах. Они представляют собой особый вид услуг в том смысле, что они предоставляют альтернативу для некоторых других служб в качестве полных служб, вместо этого предоставляя их по требованию . Я понимаю, откуда вы пришли в контексте этого вопроса, хотя, просто еще один способ запуска услуг.
DanSut
Во всех дистрибутивах; gentoo, centos, redhat, debian, ubuntu и т. д., xinetd и ранее inetd состояли из небольшого сценария оболочки для запуска, остановки и перезагрузки конфигураций для различных служб, но да, вы правы, они действительно были такими же, как и systemd.
Jas-
Ubuntu использовал upstart с 6.10, а Fedora с 9 (пока их не заменил systemd) upstart.ubuntu.com , и можно было переключить Debian с sysvinit на несколько лет ...
Джеймс Токнелл
5

Разве [это] не имеет смысла заменять старую serviceкоманду оболочкой, которая servicectlвместо этого вызывает [sic]?

Да, но […] обертка может с этим справиться, что сделает переход на systemd более плавным для пользователей.

Что , как уже говорили другие в комментариях, было сделано давно .

Команда /usr/sbin/serviceв Debian 8 является частью пакета sysvinit-utils. Он существует с 2009 года. Это специфичное для Debian дополнение, созданное RedHat к исходному пакету исходного кода sysvinit, и, как видно из чтения сценария, он распознает как запуск systemd, так и наличие выскочивших заданий, вывод команд на systemctlи initctl( через его псевдонимы) соответственно. Это было сделано с 2013 года.

service name actionдовольно широко доступен даже в операционных системах, отличных от Linux. Он даже будет работать на большинстве BSD, поскольку у них тоже есть свои собственные serviceкоманды. В serviceпакете nosh также есть команда shim, которая переводится как . Но …system-control action name

  • … Выйдите за пределы этого общего подмножества, и вокруг будет гораздо меньше совместимости.
  • ... OpenBSD не имеет serviceкоманды.
  • serviceКоманды BSD имеют давно известные проблемы, о которых системные администраторы рассказывают военные истории на протяжении десятилетий.

Включение и отключение сервисов - похожая ситуация. Хотя SuSE chkconfigпрограмма (доступно упакован для Debian и Ubuntu) очень отличается от в Fedora одной (они записываются в совершенно разных языках программирования, даже - один компилируется, один интерпретирован), есть общий минимальный синтаксис, с действием того или , Но …chkconfig name actiononoff

  • ... опять же, за пределами этого общего подмножества меньше совместимости.
  • Нет ... там нет chkconfigна BSDs, как обычные инструменты для этого либо sysrcили более позднего OpenBSD rcctl enableи rcctl disable. Есть chkconfigи rcctlрегулировочные шайбы в Nosh пакет , который переводит к и .system-control enable namesystem-control disable name
  • ... только Fedora chkconfigзнает о systemd и действует как прокладка для systemctl enableи systemctl disable. SuSE chkconfigне знает systemd.

дальнейшее чтение

JdeBP
источник
2

Не существует стандартного способа запуска и остановки служб в Linux.

Есть ли что-то, что может спасти меня от этих обреченных изменений?

Попробуйте инструмент управления конфигурацией / оркестровки: Ansible , Chef , Saltstack , Puppet или любой другой.

Вы можете запустить и включить сервис с Ansible:

ansible all -i inv -m service -a 'name=service-name state=started enabled=true'

Взгляните на класс LinuxService в serviceмодуле Ansible :

Это класс манипулирования службой Linux - в настоящее время он поддерживает смесь двоичных файлов и сценариев инициализации для управления службами, запускаемыми при загрузке, а также для управления текущим состоянием.

Евгений Верещагин
источник
Почему-то кажется, что ребята из Ubuntu смогли сохранить сервисный скрипт после переключения на systemd. Заглянуть внутрь кажется достаточно умным, чтобы использовать правильный бэкэнд. Не могу сказать то же самое о Debian.
Сорин
1

Ваша проблема в том, что Debian / Ubuntu перешли на новое systemdв качестве замены старого sysvinit. Спросите, какой из них лучше, и вы начнете огненную войну, но вы всегда можете вернуться к старому sysvinit, отметьте это, если хотите вернуться.

YoMismo
источник