Обычно синхронизация времени в Linux работает незаметно: установили
chrony, systemd-timesyncd или другой NTP-клиент - и забыли. Но после загрузки виртуальной машины системное время иногда отличается на несколько минут. Служба синхронизации исправит его, однако часть сервисов к этому моменту уже может успеть запуститься.В результате появляются:
• события в логах с неправильным временем
• ошибки проверки сертификатов
• проблемы с Kerberos и токенами
• некорректный порядок событий
• странности в распределенных системах и мониторинге
Для обычной работы постепенная коррекция времени подходит. Но на старте иногда нужно сначала выставить часы, а уже потом запускать приложение. Для этого можно создать одноразовый systemd-unit с
chronyd -q.▪️ Устанавливаем chrony:
apt install chrony
▪️ Создаем unit:
systemctl edit --force --full chrony-once-sync.service
▪️ Добавляем:
[Unit]
Description=Initial time synchronization with chrony
Wants=network-online.target
After=network-online.target
Before=myapp.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/chronyd -q -t 10
[Install]
WantedBy=multi-user.target
-q - один раз выставить время и завершить работу -t 10 - прекратить попытку через 10 секунд After=network-online.target - запускать после готовности сети Before=myapp.service - выполнить синхронизацию раньше критичного приложения▪️ Активируем юнит:
systemctl daemon-reload
systemctl enable chrony-once-sync.service
▪️ Проверяем после перезагрузки:
systemctl status chrony-once-sync.service
journalctl -u chrony-once-sync.service -b
▪️ Посмотреть порядок запуска:
systemd-analyze critical-chain myapp.service
#linux #systemd #chrony
🧑💻 NetworkAdmin