SystemdDoctor

Две службы конфликтуют: Conflicts= и взаимная остановка

Параметр Conflicts= объявляет, что две службы не могут работать одновременно: запуск одной останавливает другую. Это нужно для взаимоисключающих вещей вроде двух веб-серверов на одном порту, но неожиданно, если параметр оказался в файле случайно.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Конфликт объявлен намеренно пакетом

    Пакеты взаимоисключающих служб объявляют конфликт, чтобы не было борьбы за порт. Запуск одной честно останавливает другую.

  2. Конфликт с целью выключения

    Все службы неявно конфликтуют с целью выключения. Это нормально и означает лишь порядок остановки.

  3. Конфликт добавлен в собственный unit-файл по недоразумению

    Параметр иногда путают с зависимостями. В результате запуск службы неожиданно останавливает другую.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Конфликты в обе стороны.

systemctl show myapp.service -p Conflicts -p ConflictedBy

Кто кого остановил при загрузке.

journalctl -b --no-pager | grep -iE "stopping.*due to|conflicts with" | head

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Конфликт объявлен намеренно пакетом
Почему происходит
Пакеты взаимоисключающих служб объявляют конфликт, чтобы не было борьбы за порт. Запуск одной честно останавливает другую.
Как проверить
Посмотрите объявленные конфликты.
systemctl show nginx -p Conflicts
systemctl show apache2 -p Conflicts 2>/dev/null
Как исправить
Выберите одну службу. Если нужны обе, разведите их по портам и уберите конфликт через переопределение.
2. Конфликт с целью выключения
Почему происходит
Все службы неявно конфликтуют с целью выключения. Это нормально и означает лишь порядок остановки.
Как проверить
Посмотрите полный список конфликтов.
systemctl show myapp.service -p Conflicts
Как исправить
Ничего делать не нужно: конфликт с целью выключения есть у всех.
3. Конфликт добавлен в собственный unit-файл по недоразумению
Почему происходит
Параметр иногда путают с зависимостями. В результате запуск службы неожиданно останавливает другую.
Как проверить
Посмотрите свои unit-файлы на наличие параметра.
grep -rn "^Conflicts" /etc/systemd/system/*.service 2>/dev/null
Как исправить
Уберите параметр, если взаимоисключения нет. Для порядка запуска нужны After= и Before=.

Пример вывода

Запуск nginx остановил apache. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

systemd[1]: Stopping apache2.service - The Apache HTTP Server...
systemd[1]: apache2.service: Deactivated successfully.
systemd[1]: Stopped apache2.service - The Apache HTTP Server.
systemd[1]: Started nginx.service - A high performance web server.

$ systemctl show nginx.service -p Conflicts
Conflicts=apache2.service shutdown.target

Связанные ошибки

Где встречается чаще всего

Источники

  • systemd.unit(5)
    Conflicts= и неявные конфликты с целью выключения.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено на nginx и apache2 из пакетов Ubuntu.
    собственная проверка, systemd 255
    сверено 15 сентября 2026