SystemdDoctor
служба не работает логи обслуживание

logrotate: ошибка в действии после ротации

После ротации logrotate выполняет действие, которое должно заставить службу переоткрыть файлы журнала. Если оно падает, ротация формально прошла: старый файл переименован, а служба продолжает писать в него — и новые записи исчезают из виду.

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

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

  1. Действие вызывает несуществующую команду или unit

    Типичный случай: описание ротации перенесено с другой машины, где служба называлась иначе.

  2. Служба не умеет переоткрывать файлы

    Действие выполняется, но программа не реагирует. Она продолжает писать в переименованный файл.

  3. Права не позволяют выполнить действие

    Ротация выполняется от root, но действие может обращаться к тому, к чему доступа нет — например к сокету службы.

Диагностика

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

Прогон без изменений: показывает, что и как будет выполнено.

sudo logrotate -d /etc/logrotate.d/myapp

В какой файл пишет служба прямо сейчас.

PID=$(systemctl show -p MainPID --value myapp.service); sudo ls -l /proc/$PID/fd | grep log

Решение

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

1. Действие вызывает несуществующую команду или unit
Почему происходит
Типичный случай: описание ротации перенесено с другой машины, где служба называлась иначе.
Как проверить
Посмотрите описание и выполните прогон.
sudo cat /etc/logrotate.d/myapp
sudo logrotate -d /etc/logrotate.d/myapp 2>&1 | tail -20
Как исправить
Исправьте действие: для служб под systemd обычно достаточно перезагрузки настроек через systemctl reload.
2. Служба не умеет переоткрывать файлы
Почему происходит
Действие выполняется, но программа не реагирует. Она продолжает писать в переименованный файл.
Как проверить
Посмотрите, куда пишет служба после ротации.
PID=$(systemctl show -p MainPID --value myapp.service); sudo ls -l /proc/$PID/fd 2>/dev/null | grep -i log
Как исправить
Либо используйте параметр копирования с усечением вместо переименования, либо переведите вывод в журнал systemd: тогда ротация не нужна вовсе.
3. Права не позволяют выполнить действие
Почему происходит
Ротация выполняется от root, но действие может обращаться к тому, к чему доступа нет — например к сокету службы.
Как проверить
Посмотрите вывод прогона.
sudo logrotate -v /etc/logrotate.d/myapp 2>&1 | tail -20
Как исправить
Исправьте действие так, чтобы оно работало от root: обращение к службе делается через systemctl.

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

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

logrotate[4200]: error: error running shared postrotate script for /var/log/myapp/*.log
logrotate[4200]: Failed to reload myapp.service: Unit myapp.service not found.
systemd[1]: logrotate.service: Main process exited, code=exited, status=1/FAILURE

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

Источники

  • logrotate(8)
    Действия после ротации и параметры копирования.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено действием с неверным именем службы.
    собственная проверка, systemd 255
    сверено 15 сентября 2026