Warning: The unit file … changed on disk
Предупреждение «The unit file, source configuration file or drop-ins of … changed on disk» значит, что вы правили unit-файл, а systemd ещё держит в памяти прежнюю версию. Все команды до перезагрузки конфигурации будут применять старые настройки.
Что это значит
Это самая частая причина, по которой «правка не работает». Порядок всегда один: правим файл, выполняем systemctl daemon-reload, затем перезапускаем службу. Перезапуск без перезагрузки конфигурации применит старый вариант.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Unit-файл или drop-in изменён без перезагрузки конфигурации
systemd читает файлы при запуске и по команде. Изменения на диске он замечает, но сам не применяет.
-
Правка внесена пакетом при обновлении
Обновление пакета заменяет unit-файл в /usr/lib/systemd/system. До перезагрузки конфигурации действует прежний вариант, и поведение службы не совпадает с файлом на диске.
-
Правка внесена не в тот файл
Если есть переопределение в /etc/systemd/system, правка файла пакета не даст эффекта: победит переопределение. Предупреждение при этом может и не появиться.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Прямо отвечает, нужна ли перезагрузка конфигурации: yes или no.
systemctl show myapp.service -p NeedDaemonReloadПечатает действующее описание со всеми drop-in и путями файлов — по нему видно, что реально применено.
systemctl cat myapp.serviceПосле удаления файлов без перезагрузки конфигурации остаются «потерянные» unit — их видно здесь.
systemctl list-units --state=not-found --no-pager | headРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- systemd читает файлы при запуске и по команде. Изменения на диске он замечает, но сам не применяет.
- Как проверить
-
Посмотрите, что systemd считает действующей конфигурацией.
systemctl cat myapp.service systemctl show myapp.service -p NeedDaemonReload
- Как исправить
-
Перечитайте конфигурацию и перезапустите службу.
sudo systemctl daemon-reload && sudo systemctl restart myapp.service
- Почему происходит
- Обновление пакета заменяет unit-файл в /usr/lib/systemd/system. До перезагрузки конфигурации действует прежний вариант, и поведение службы не совпадает с файлом на диске.
- Как проверить
-
Сравните время изменения файла и время запуска systemd.
ls -l /usr/lib/systemd/system/myapp.service systemctl show -p NeedDaemonReload --value myapp.service
- Как исправить
- Выполните перезагрузку конфигурации. В дистрибутивах это обычно делает сам пакет, но при установке вручную шаг остаётся за вами.
- Почему происходит
- Если есть переопределение в /etc/systemd/system, правка файла пакета не даст эффекта: победит переопределение. Предупреждение при этом может и не появиться.
- Как проверить
-
Посмотрите все источники конфигурации службы.
systemctl cat myapp.service | head -5 sudo ls -l /etc/systemd/system/myapp.service.d/ 2>/dev/null
- Как исправить
-
Правьте переопределение через
systemctl edit myapp.service— так правка окажется там, где её действительно применят.
Пример вывода
systemctl предупреждает, что файл на диске новее загруженного. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ systemctl status myapp.service
Warning: The unit file, source configuration file or drop-ins of myapp.service changed on disk.
Run 'systemctl daemon-reload' to reload units.
● myapp.service - My application
Loaded: loaded (/etc/systemd/system/myapp.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-09-15 10:02:31 MSK; 2h ago
Связанные ошибки
- Unit … not found: unit-файл не найден Сообщение Unit not found при запуске службы: файла нет, не выполнен daemon-reload, опечатка в имени или не указано расширение.
- Переопределение через drop-in не применяется Правка через systemctl edit или файл в каталоге .d не действует: разбор причин, включая особенность списочных параметров и ExecStart.
- Unit file is bad и ошибки разбора unit-файла systemd не может разобрать unit-файл: неизвестные параметры, ошибки в секциях, недопустимые значения. Как найти проблемную строку.
- Apache: Invalid command — не включён модуль Apache не запускается: директива требует модуль, который не подключён. Как найти нужный модуль и включить.
- Docker: unable to configure the Docker daemon with file daemon.json Демон Docker не запускается из-за ошибки в /etc/docker/daemon.json: неверный JSON или неизвестный ключ.
- Service has more than one ExecStart= setting Несколько команд запуска допустимы только при Type=oneshot. Как правильно заменить команду в переопределении.
- Unit is masked: служба запрещена к запуску Сообщение Unit is masked: unit заблокирован ссылкой на /dev/null. Как найти и снять маскировку.
- Unit … has no installation config: не включается автозапуск systemctl enable отказывает: в unit-файле нет секции [Install] или WantedBy. Как включить службу в автозапуск правильно.
Источники
-
systemctl(1)
daemon-reload и когда он необходим. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено правкой unit-файла с последующим перезапуском без daemon-reload: применялась прежняя версия.