Вопрос или проблема
Я только что установил unbound на свежезав установленном VPS с Ubuntu 16.04. Чтобы быть уверенным, я выполнил команду enable (которая на самом деле выполняется автоматически во время установки)
sytemctl enable unbound
После перезагрузки сервера unbound не смог запуститься, и в syslog показано:
[...]
12:45:58 systemd[1]: Запуск unbound.service...
12:45:58 unbound[1036]: * Запуск DNS-сервера unbound
12:50:58 systemd[1]: unbound.service: Время ожидания операции запуска истекло. Завершение.
12:50:58 systemd[1]: Не удалось запустить unbound.service.
12:50:58 systemd[1]: unbound.service: Юнит вошел в состояние ошибки.
12:50:58 systemd[1]: unbound.service: Не удалось с результатом 'timeout'.
12:55:01 unbound-anchor: /var/lib/unbound/root.key содержит данные
12:55:01 unbound-anchor: успех: якорь в порядке
[...]
Кроме того, “journalctl” за последнюю загрузку показывает больше информации:
[...]
12:50:58 systemd[1]: unbound.service: Время ожидания операции запуска истекло. Завершение.
12:50:58 systemd[1]: Не удалось запустить unbound.service.
12:50:58 systemd[1]: Не выполняется зависимость для поиска имён хоста и сети.
12:50:58 systemd[1]: nss-lookup.target: Задание nss-lookup.target/start завершилось с результатом 'dependency'.
12:50:58 systemd[1]: unbound.service: Юнит вошел в состояние ошибки.
12:50:58 systemd[1]: unbound.service: Не удалось с результатом 'timeout'.
12:50:58 systemd[1]: Достигнута цель Мультипользовательская система.
[...]
Когда я затем вручную выполняю
systemctl start unbound
Тогда unbound запускается как ожидалось, и в syslog показано:
12:58:32 systemd[1]: Запуск unbound.service...
12:58:32 unbound[1268]: * Запуск DNS-сервера unbound
12:58:34 unbound-anchor: /var/lib/unbound/root.key содержит данные
12:58:34 unbound-anchor: успех: якорь в порядке
12:58:34 unbound: [1284:0] уведомление: инициализация модуля 0: валидатор
12:58:34 unbound: [1284:0] уведомление: инициализация модуля 1: итератор
12:58:34 unbound: [1284:0] информация: запуск службы (unbound 1.5.8).
12:58:34 unbound[1268]: ...готово.
12:58:34 systemd[1]: Запущен unbound.service.
Проблема, похоже, связана с “nss-lookup”, и я подозреваю, что сетевой интерфейс не становится доступным достаточно быстро, но пока я не знаю, как это решить.
Это вполне валидный вопрос, и судя по количеству просмотров, отсутствие ответа на протяжении всех этих лет грустно. Я тоже с этим сталкивался.
Unbound по-прежнему не дружит с systemd. Возможно, разработчики придерживаются initd.
Мой первый хак (на Rocky Linux 8) был полным костылем. Вам нужно было добавить следующее в unbound.service:
> Wants=network-online.target
> After=network-online.target
Но это требовало возврата файла после обновлений. Удачи с этим.
Лучшее решение, которое у меня есть на данный момент, — это добавить это в кронтаб пользователя root:
@reboot /bin/systemctl restart unbound
Это, похоже, срабатывает.
Ответ или решение
Проблема с тем, что служба unbound не запускается автоматически после перезагрузки сервера, может быть связана с тем, что сеть еще не полностью инициализирована на момент, когда systemd пытается запустить данную службу. Это может приводить к таймауту, как указано в ваших логах. Вот несколько шагов, которые помогут вам исправить эту ситуацию:
Решение 1: Изменение файла юнита systemd
-
Создайте новый файл переопределения юнита. Вместо редактирования оригинального файла службы, лучше создать файл переопределения, чтобы изменения не потерялись при обновлении пакетов. Для этого выполните следующую команду:
sudo systemctl edit unbound
Эта команда откроет редактор. Вставьте следующий текст:
[Unit] Wants=network-online.target After=network-online.target
Сохраните и закройте редактор.
-
Перезапустите конфигурацию systemd:
sudo systemctl daemon-reload
-
Перезагрузите сервер для тестирования:
sudo reboot
Решение 2: Использование cron для перезапуска unbound
Если по какой-то причине изменение юнита не подходит, вы можете использовать cron
для перезапуска службы unbound после загрузки системы.
-
Откройте crontab для пользователя root:
sudo crontab -e
-
Добавьте следующую строку в конце файла:
@reboot /bin/systemctl restart unbound
-
Сохраните и закройте редактор.
Этот метод перезапустит службу unbound сразу после загрузки системы и гарантирует, что она будет активирована, даже если она не смогла стартовать самостоятельно.
Проверка статуса службы
После выполнения данных шагов, вы можете проверить статус службы unbound, чтобы убедиться, что она работает корректно:
systemctl status unbound
Если проблемы продолжаются или возникают новые ошибки, обратите внимание на логи с помощью команды:
journalctl -u unbound
Это поможет вам понять, что может идти не так на этапе запуска unbound.
Эти подходы должны помочь вам решить проблему со стартом unbound после перезагрузки. Если возникнут дополнительные вопросы или трудности, пожалуйста, не стесняйтесь спрашивать.