SystemdDoctor
служба не работает мониторинг данные

Prometheus: каталог данных занят другим экземпляром

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

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

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

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

    Аварийное завершение оставляет файл блокировки. Новый запуск считает, что данные заняты.

  2. Два экземпляра на одном каталоге

    Так бывает при ручном запуске поверх службы или при двух unit-файлах на одни данные.

  3. Каталог данных принадлежит не пользователю службы

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

Диагностика

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

Сообщение о блокировке.

sudo tail -30 /var/log/syslog 2>/dev/null | grep -i prometheus || journalctl -u prometheus -n 30 --no-pager

Работающие процессы.

pgrep -a prometheus

Владелец каталога данных.

sudo ls -ld /var/lib/prometheus

Решение

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

1. Блокировка осталась от прерванного запуска
Почему происходит
Аварийное завершение оставляет файл блокировки. Новый запуск считает, что данные заняты.
Как проверить
Убедитесь, что процессов нет, и посмотрите файл.
pgrep -a prometheus
sudo ls -l /var/lib/prometheus/lock 2>/dev/null
Как исправить
При отсутствии процессов удалите файл блокировки и запустите службу. При работающем процессе — сначала остановите службу.
sudo systemctl stop prometheus && sudo rm -f /var/lib/prometheus/lock && sudo systemctl start prometheus
2. Два экземпляра на одном каталоге
Почему происходит
Так бывает при ручном запуске поверх службы или при двух unit-файлах на одни данные.
Как проверить
Посмотрите процессы и их ключи.
pgrep -a prometheus
systemctl list-units "prometheus*" --all --no-pager
Как исправить
Оставьте один экземпляр на каталог данных. Для второго нужен свой каталог и свой порт.
3. Каталог данных принадлежит не пользователю службы
Почему происходит
После восстановления из копии владелец мог измениться, и служба не может создать блокировку.
Как проверить
Посмотрите владельца.
sudo ls -ld /var/lib/prometheus
systemctl show prometheus -p User
Как исправить
Смените владельца каталога данных на пользователя службы и запустите её заново.

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

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

prometheus[4200]: level=error msg="opening storage failed" err="lock DB directory: resource temporarily unavailable"
systemd[1]: prometheus.service: Main process exited, code=exited, status=1/FAILURE

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

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

Источники

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