systemd - менеджер по роботі. Сторінка людини не дуже точна щодо того, як все працює.
Коли ви завантажуєтесь, що systemd робить, це побудувати транзакцію, що складається з завдань для прив’язного завдання (тобто, розпочати роботу для default.target). Що всі ці залежності і стосунки роблять - це визначати, як і які завдання будуть працювати. Замовлення визначає, яку роботу (-ів) буде чекати кожна інша робота. Таким чином, цільовий блок за замовчуванням знаходиться в центрі всього цього, і тому при включенні одиниць ви використовуєте зворотну залежність, яка через включення systemctl створює символічне посилання файлової системи, що позначає пряму залежність, яку може застосувати systemd (також, чому вам потрібна символьна посилання на файлову систему першість). Аналогічно, коли ви вручну запускаєте якусь одиницю, тоді ця одиниця є якорем, а транзакція обчислюється wrt її.
Не буду надто детально, я поясню, що вимагає = і після = робить.
Requires = призведе до того, що systemd запустить стартове завдання для потрібного блоку, коли ви отримаєте стартове завдання (явно або через залежність: немає розрізнення внутрішньо). Він також має властивість запускати роботу зупинки на вас, коли цей пристрій зупинено (зверніть увагу: зупинено, не спускається самостійно) або перезапущено. Це означає, що якщо якась залежність / systemctl змушує його зупинятись / перезапускати, ви також зупинитесь / перезапустите. Однак, якщо воно піде самостійно, ви не зупинитесь, оскільки роботи не було, а зміна держави відбулася без участі системи. Ось де ви б використовували BindsTo = (подібно до блоків пристроїв, які з очевидних причин можуть переходити до неактивних без участі системи).
Тепер використання After = рекомендується, оскільки Requires = поодинці є раціональним для того, що він робить: скасуйте реквізит, якщо стартове завдання не вдасться. Це скасування, однак, працює лише у робочих місцях wrt, тобто якщо інший підрозділ не визначає впорядкування, systemd запускає і паралельно, і якщо його початкове завдання закінчиться до того, як ваше стартове завдання закінчиться, воно не буде скасовано (фактично його неможливо скасувати) . Використання After = означає, що інша робота продовжує чекати, поки не закінчиться початкове завдання потрібного підрозділу, і залежно від результату, якщо воно не вдалося, завдання запуску очікування вашого блоку скасовується результатом завдання JOB_DEPENDENCY (чому ви використовуєте жовтий [DEPEND] при завантаженні для таких випадків). Отже, цей ефект недійсності не є адміністративним без використання After =.
Ось чому використання Wants = without After = добре, якщо ви не хочете чекати запуску іншого підрозділу: як там немає інвалідів, так і немає гонки. У цьому випадку це не більше ніж механізм синхронізації.
Крім того, ви можете ввімкнути обидва під час завантаження, а не вимагати одне одного, а також визначити лише замовлення, у тому випадку, коли обидва витягнуті як частина однієї транзакції, вони будуть впорядковані (або якщо завдання для іншого запущено поки робота для підрозділу, який він хоче запустити, буде запущена, вона спочатку дочекається її завершення через транзакції).
Тепер, якщо немає роботи, замовлення не впливає на зазначений підрозділ. Однак, як правило, є робота, як наслідок використання залежностей, таких як Requires = і Wants =, або обидві, що потрапляють за раз і визначають певне замовлення, і в цьому випадку вони чекають на роботу іншого підрозділу.