TGViewer
DevOps DevOps @devopsitsec · 23.7K subscribers
Post #1610 3.5K
🧠 Хитрая DevOps-задача — неожиданное поведение systemd и зависимостей сервисов

Задача:

У вас есть два systemd-сервиса: backend.service и database.service.

В юните backend.service вы прописали:


[Unit]
Requires=database.service
After=database.service


Но после перезагрузки системы backend.service запускается, хотя `database.service` не стартовал (из-за ошибки).

Вопрос:
Почему backend не дождался базы данных и не остановился вместе с ней, несмотря на Requires=database.service?

Подсказка: это не баг systemd. Это особенность.

Правильный ответ:
Потому что Requires и After действуют только при запуске backend вручную или через systemctl, но не при автоматическом старте на boot, если backend стартует по WantedBy=multi-user.target.

🔍 Разбор

- Requires=database.service говорит: если запускается backend, то systemd должен также запустить database.
Но если database не стартует — backend всё равно может попытаться запуститься.

- After=database.service определяет порядок запуска, но не делает зависимость "жёсткой".

- При старте системы systemd может параллельно запускать сервисы, если backend привязан напрямую к multi-user.target и не указан как зависимость в database.service.

✅ Как правильно:

Чтобы backend не запускался без базы:

1. Убедитесь, что database.service:
- прописан как WantedBy=multi-user.target
- и запускается первым

2. Убедитесь, что backend.service содержит:


[Unit]
Requires=database.service
After=database.service
StartLimitIntervalSec=0


3. И желательно добавить `PartOf=database.service`, если хотите, чтобы backend выключался вместе с базой.

⚠️ Вывод:

- В systemd порядок и тип зависимостей — неочевидны.
- Даже Requires не гарантирует, что другой сервис успешно работает — только то, что systemd *попробует* его запустить.
- Хотите быть уверены — используйте Condition*, ExecStartPre с проверками или HealthCheck в Docker/K8s.

📌 systemd — мощный, но коварный. Не доверяй поверхностной логике — тестируй руками каждую зависимость.
  • ❤ 15
  • 👍 9
  • 🥰 3
  • 🤔 1
More from @devopsitsec
  1. Sep 26, 2026Согласны ?
  2. Sep 26, 2026📌Fable 5.1 рассчитала амплитуду рассеяния в девяти петлях Модель в среде Claude Science р…
  3. Sep 25, 2026Как строить инфраструктуру, когда часть сервисов — on-prem, а часть — в cloud Гибридная ин…
  4. Sep 24, 2026Снёс коммиты? Как вернуть код после git reset -hard Одна команда - и три коммита исчезли и…
  5. Sep 24, 2026⚡️ В Kubernetes соединения случайно обрываются под нагрузкой? Проверьте conntrack. Если та…
  6. Sep 24, 2026🤖 ИИ-агенты теперь могут самостоятельно работать с задачами в GitLab Обычно разработчик о…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →