Запустити службу systemd після певної служби? [зачинено]


85

У мене загальне запитання. Як запустити системний блок *.serviceпісля *.serviceуспішного запуску конкретного ?

Більш конкретне питання полягає в тому, як почати website.serviceлише після mongodb.serviceпочатку? Іншими словами, це website.serviceповинно залежати від mongodb.service.


1
Це питання належить ServerFault, чи не так?
Ремі

1
@ Rémi це нормально на обох сайтах! :)
Анонімний пінгвін

2
@AnonymousPenguin Ні, просто це було приблизно 3,5 роки до того, як ти відповів, це не тематичне питання для SO. Справа не в програмуванні. SF або, краще, Unix / Linux.SE були б набагато доречнішими.
underscore_d

Stack Overflow - це сайт для питань програмування та розробки. Здається, це питання не є темою, оскільки мова не йде про програмування чи розробку. Подивіться, які теми я можу запитати тут, у довідковому центрі. Можливо, кращим місцем для запитання буде Super User або Unix & Linux Stack Exchange .
jww

Відповіді:


118

У файлі .service у розділі [Unit]:

[Unit]
Description=My Website
After=syslog.target network.target mongodb.service

Важливою частиною є mongodb.service

Ця сторінка описує це, однак через форматування це не так зрозуміло на перший погляд

systemd.unit - добре відформатований

systemd.unit - не дуже добре відформатований


1
Наш сервіс mongod запускає дуже велику базу даних. Подальша служба запускається неправильно, оскільки, здається, mongo вимагає більше часу для завантаження бази даних після запуску. Отже, наша друга служба запускається, але не працює, оскільки mongo успішно запустився, але не завантажив базу даних. Можливо, затримка може допомогти ...
шлях до майбутнього

Чи можливо для системної служби обробляти наступні сценарії. Розгляньте кілька служб A, B, C, D. Якщо A існує, я хочу, щоб B, C, D починалися лише після A ще, якщо A не існує B, C, D може починатися в будь-якому порядку. Будь ласка, допоможіть
ахіллес

@achilles Чи можете ви створити підроблений сервіс A у системах, де A не потрібен. Таким чином, залежності B, C, D можуть бути простішими.
Вальтер,

50

After=залежність ефективна лише тоді, коли служба, включаючи After=та послугу, що входить, After=планується почати як частина завантаження.

Приклад:

a.service
[Unit]
After=b.service

Таким чином, якщо обидва a.serviceі b.serviceбудуть включені , то Systemd замовлення буде b.serviceпісля a.service.

Якщо я не розумію непорозуміння, ви запитуєте, як почати, b.serviceколи a.serviceзапускається, хоча b.serviceце не ввімкнено.

Директива щодо цього є Wants=або Requires=нижче [Unit].

website.service
[Unit]
Wants=mongodb.service
After=mongodb.service

Різниця між Wants=та Requires=полягає в тому, що з Requires=, якщо невдалий запуск b.serviceпризведе a.serviceдо збою запуску , тоді як з Wants=, a.serviceпочнеться, навіть якщо b.serviceне вдається. Це докладно пояснено на довідковій сторінці.unit .


8
Я вважаю, що правда - прямо протилежна цій відповіді. After=website.serviceозначає "запустити мій блок після веб-сайту. service!". Ось що пояснюється в документах: "After = гарантує, що налаштований блок запускається після завершення запуску перерахованого блоку" . Я припускаю, що "перелічені одиниці" - це одиниці з правого боку "Після =".
Sindarus

"Таким чином, якщо активовано як a.service, так і b.service, тоді systemd замовить b.service після a.service." Ви не маєте на увазі навпаки? swap(a, b)
Mateen Ulhaq
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.