Чи є стандартний спосіб запускати та зупиняти послуги на 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 є стандартом де-факто зараз: може також звикнути до нього.
Jasonwryan

1
Додатково: якщо команда служби стає непотрібною, чи можу я її видалити? Який пакет надає його?
sorin

3
Не має сенсу замінювати стару serviceкоманду обгорткою, яка натомість викликає servicectl?
sorin

4
@jasonwryan Так, але ви також можете зробити саме це , і обгортка може впоратися з цим, зробивши перехід на системний плавніший для користувачів.
Дмитро Григор'єв

2
Невже serviceдля вас нічого не роблять? Це працює так, як очікувалося на моєму LMDE (що в основному є тестуванням Debian), я не вважав, що це специфічна для LMDE річ. Він також працює, як очікувалося, в моєму VM Ubuntu.
terdon

Відповіді:


6

За всю історію, що склалася, Unix існував на різних платформах Unix.

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

SysVinit не був ідеальним рішенням (що таке?), І Systemd був розроблений для подолання багатьох питань; це systemctlсистема на основі команд, яку ви зараз відчуваєте. Хоча це не є загальнолюдським (люди ненавидять зміни, здуття тощо), без сумніву, він швидко стає стандартом дефакто у більшості дистрибутивів.

Тому, дивлячись негайно направити відповідь на свій первісний питання просто: стандартний спосіб управління послугами через більшість дистрибутивів Linux зараз ! Як довго це буде справджуватись, хтось здогадується; певно, поки щось не стане, що стане кращим і не стане широко прийнятим.
systemctl

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


А до цього було xinetd, а до цього було inetd
jas-

@ jas- Я думаю, що inetd - це самі сервіси, я вважаю, що вони можуть існувати у всіх системах завантаження. Вони є особливим видом послуг, оскільки вони надають альтернативу деяким іншим послугам, які працюють як повноцінні сервіси, замість того, щоб надавати їх на вимогу . Я розумію, звідки ви беретеся в контексті цього Q, але це просто інший спосіб запуску послуг.
DanSut

У всіх дистрибуціях; gentoo, centos, redhat, debian, ubuntu тощо, xinetd і раніше inetd складалися з невеликого скрипта оболонки для запуску, зупинки та перезавантаження конфігурацій для різних служб, але так, ви правильно, вони справді були сервісом, як і systemd.
jas-

Ubuntu використовував новітню версію з 6.10, а Fedora - з 9 (поки їх не замінив systemd) upstart.ubuntu.com , і Debian можна було відключити від sysvinit протягом декількох років ...
James Tocknell

5

Чи не має сенсу замінювати стару serviceкоманду обгорткою, яка servicectlнатомість викликає [sic]?

Так, але […] обгортка може впоратися з цим, зробивши перехід до системного плавнішим для користувачів.

... це, як говорили інші в коментарях, те , що було зроблено давно .

/usr/sbin/serviceКоманда на Debian 8 є частиною пакета SysVinit-Utils. Він існує з 2009 року. Це специфічне для Debian додаток RedHat до оригінального пакета вихідних програм sysvinit, і як видно з читання сценарію, він розпізнає як запущений системний режим, так і наявність запущених завдань, розробки команд для systemctlта initctl( через його псевдоніми). Це вона робила з 2013 року.

service name actionдосить широко доступний навіть у нелінуксних операційних системах. Він навіть працюватиме на більшості BSD, оскільки вони теж мають свої serviceкоманди. У serviceпакеті nosh, який перекладається, також є команда shim . Але ...system-control action name

  • ... вийти за межі цього загального підмножини, і сумісність набагато менше.
  • … OpenBSD не має serviceкоманди.
  • … BSD service Команди мають відомі проблеми давнього існування, про які системні адміністратори розповідають історії війни протягом десятиліть.

Увімкнення та відключення послуг - аналогічна ситуація. Хоча chkconfigпрограма SuSE (доступна в упаковці для Debian і Ubuntu) сильно відрізняється від Fedora (вони написані зовсім іншими мовами програмування, навіть - одна компільована, одна інтерпретована), є загальний мінімальний синтаксис, при цьому дія виконуєтьсяchkconfig name actionon або off. Але ...

  • … Знову ж таки, поза цим загальним підмножиною є менша сумісність.
  • ... chkconfigна BSD немає, оскільки звичайними інструментами для цього є sysrcабо новіші OpenBSD, rcctl enableі rcctl disable. У пакеті nosh, який перекладається, є chkconfigі rcctlпереливаєтьсяsystem-control enable name та .system-control disable name
  • … Тільки Fedora chkconfigзнає про systemd і діє як прихильність для systemctl enableта systemctl disable. СУСЕchkconfig не має знань про systemd.

Подальше читання


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 - він на даний момент підтримує суміш бінарних файлів та сценаріїв init для контролю служб, запущених під час завантаження, а також для контролю поточного стану.


Якось здається, що хлопці Ubuntu змогли зберегти сервісний скрипт працюючим після переходу на systemd. Заглянувши всередину, здається, досить розумним, щоб використовувати правильний сервіс. Не можу сказати те саме про Debian.
sorin



1

Ваша проблема полягає в тому, що Debian / Ubuntu перейшли на нове systemdяк заміна старого sysvinit. Запитайте, хто з них кращий, і ви розпочнете війну полум'я, але ви завжди можете повернутися до старого sysvinit, перевірте це, якщо хочете повернутися назад.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.