Базы антивируса не обновляются, служба не стартует
Служба проверки отказывается запускаться без баз, а служба обновления баз при неудаче оставляет их отсутствующими. Получается замкнутый круг, в котором обе службы в состоянии сбоя, хотя причина одна — неудачное обновление.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Каталог баз недоступен для записи
Служба обновления работает от своего пользователя. Без права записи в каталог баз обновление не проходит.
-
Не хватает памяти или места для баз
Базы велики, и их загрузка требует и места на диске, и памяти. На малых машинах служба проверки не поднимается.
-
Обновление идёт, но служба проверки не перечитывает базы
После обновления служба проверки должна перечитать базы. Без этого она работает со старыми.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Результат последних попыток обновления баз.
journalctl -u clamav-freshclam -n 30 --no-pagerЕсть ли базы и когда обновлялись.
sudo ls -l /var/lib/clamav/Состояние службы проверки.
systemctl status clamav-daemon --no-pager | head -8Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Служба обновления работает от своего пользователя. Без права записи в каталог баз обновление не проходит.
- Как проверить
-
Посмотрите права каталога и пользователя службы обновления.
sudo ls -ld /var/lib/clamav 2>/dev/null systemctl show clamav-freshclam -p User -p StateDirectory 2>/dev/null
- Как исправить
-
Передайте каталог пользователю службы обновления или объявите его через
StateDirectory=: права выставит systemd.
- Почему происходит
- Базы велики, и их загрузка требует и места на диске, и памяти. На малых машинах служба проверки не поднимается.
- Как проверить
-
Посмотрите место, память и предел памяти службы.
df -h /var/lib/clamav 2>/dev/null; free -h systemctl show clamav-daemon -p MemoryMax -p MemoryCurrent 2>/dev/null
- Как исправить
- Освободите место и согласуйте предел памяти службы с объёмом баз. Предел ниже нужного означает остановку процесса ядром при загрузке баз.
- Почему происходит
- После обновления служба проверки должна перечитать базы. Без этого она работает со старыми.
- Как проверить
-
Посмотрите время обновления баз и время перезагрузки службы.
sudo ls -l --time-style=full-iso /var/lib/clamav/*.cvd /var/lib/clamav/*.cld 2>/dev/null | head systemctl show clamav-daemon -p ExecMainStartTimestamp 2>/dev/null
- Как исправить
- Настройте оповещение службы проверки после обновления баз. В большинстве сборок это делается штатной настройкой службы обновления.
Пример вывода
Каталог баз недоступен для записи. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
freshclam[7400]: ERROR: Can't create temporary directory /var/lib/clamav/tmp.7c1a
freshclam[7400]: Hint: The database directory must be writable for UID 108 or GID 113
systemd[1]: clamav-freshclam.service: Main process exited, code=exited, status=62
clamd[7410]: ERROR: Can't open file or directory /var/lib/clamav/daily.cld
Связанные ошибки
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- status=238/STATE_DIRECTORY в systemd Код 238/STATE_DIRECTORY: не удалось подготовить постоянный каталог службы в /var/lib из StateDirectory=.
- No space left on device в журнале службы Нет места на устройстве: разбор по свободным блокам, по inode, по журналу systemd и по удалённым, но открытым файлам.
- AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
- Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
- Interactive authentication required при управлении службой systemctl требует аутентификации: обращение от непривилегированного пользователя через polkit. Как разрешить точечно.
Источники
- Документация ClamAV
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено каталогом баз, недоступным для записи пользователю службы.