SystemdDoctor
служба не работает копии таймеры

Резервное копирование не идёт: хранилище копий заблокировано

Средства резервного копирования ставят блокировку на хранилище, чтобы два запуска не портили данные. Прерванный запуск блокировку не снимает, и следующие запуски падают. Опасность в том, что падает это тихо: таймер срабатывает, задача отказывает, копий нет неделями.

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

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

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

    Прошлая задача была убита по таймауту или вместе с сеансом. Блокировка в хранилище осталась.

  2. Задача убивается по таймауту

    Долгое копирование не успевает за отведённое время, systemd его убивает, и блокировка остаётся. Так повторяется каждый запуск.

  3. Отказ таймера никто не замечает

    Таймер срабатывает, задача падает, и об этом нет ни письма, ни оповещения. Отсутствие копий обнаруживается тогда, когда они нужны.

Диагностика

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

История запусков: когда копирование удавалось в последний раз.

journalctl -u backup.service --since "14 days ago" --no-pager | grep -iE "Started|Failed|lock"

Когда таймер срабатывал и когда сработает снова.

systemctl list-timers backup.timer --no-pager

Таймаут задачи и оповещение об отказе.

systemctl show backup.service -p TimeoutStartSec -p OnFailure

Решение

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

1. Блокировка осталась от прерванного запуска
Почему происходит
Прошлая задача была убита по таймауту или вместе с сеансом. Блокировка в хранилище осталась.
Как проверить
Посмотрите сообщение задачи и время последнего успешного запуска.
journalctl -u backup.service -n 30 --no-pager | grep -iE "lock|failed"
systemctl show backup.service -p ExecMainExitTimestamp
Как исправить
Снимите блокировку штатной командой средства копирования, убедившись, что процесса копирования нет. Удалять файлы блокировки вручную не нужно.
2. Задача убивается по таймауту
Почему происходит
Долгое копирование не успевает за отведённое время, systemd его убивает, и блокировка остаётся. Так повторяется каждый запуск.
Как проверить
Посмотрите таймаут и длительность прошлых запусков.
systemctl show backup.service -p TimeoutStartSec -p Type
journalctl -u backup.service --since "7 days ago" --no-pager | grep -iE "Started|Succeeded|Failed|timeout"
Как исправить
Увеличьте таймаут для задачи копирования или снимите его совсем: для одноразовой задачи с непредсказуемой длительностью это уместно.
[Service]
Type=oneshot
TimeoutStartSec=infinity
3. Отказ таймера никто не замечает
Почему происходит
Таймер срабатывает, задача падает, и об этом нет ни письма, ни оповещения. Отсутствие копий обнаруживается тогда, когда они нужны.
Как проверить
Посмотрите, чем заканчивались последние запуски.
systemctl list-timers backup.timer --no-pager
systemctl is-failed backup.service; systemctl show backup.service -p OnFailure
Как исправить
Добавьте оповещение об отказе через OnFailure= и следите за состоянием задачи снаружи. Таймер без наблюдения за результатом — источник ложного спокойствия.
[Unit]
OnFailure=notify-failure@%n.service

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

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

systemd[1]: Starting backup.service - Nightly backup...
borg[5400]: Failed to create/acquire the lock /srv/repo/lock.exclusive (timeout).
systemd[1]: backup.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
systemd[1]: backup.service: Failed with result 'exit-code'.

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

Источники

  • Документация Borg: блокировки хранилища документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено убийством задачи копирования на середине.
    собственная проверка, systemd 255
    сверено 15 сентября 2026