NTP через proxy или HTTPDate

NTP сервер работающий в корпоративной локальной сети по каким-то мне непонятным причинам довольно тормозной (и никто с этим ничего делать не хочет), поэтому я первым делом после установки системы установил ntpdate и благополучно забыл про него думая, что всё работает. Не так давно я обнаружил, что время на рабочем ПК заметно отстаёт. Оказалось, что ntpdate не умеет работать через proxy и ничего с этим не поделаешь. Беглый гуглёж показал, что я не одинок и самый простой вариант - это использовать заголовок Date из HTTP запроса какого нибудь сайта. Именно так я и решил сделать.

Создадим файл httpdate в директории /etc/cron.daily/ с таким содержанием:

#!/bin/bash

USERNAME="user"
PASSWORD="password"
HOST="proxy.example.com"
PORT="8080"
CHECKHOST="google.com" # Хост для проверки доступности сети
DATEHOST="http://google.com" # Хост с которого будем брать время

export http_proxy=http://$USERNAME:$PASSWORD@$HOST:$PORT

if ( ! ping -c5 -i1 -n -s10 -W1 $CHECKHOST  &>/dev/null ); then
    logger "HTTPDate: Network in unreachable."
    exit 1
fi

date -s "$(wget -S - "$DATEHOST" 2>&1 |
        grep -E '^[[:space:]]*[dD]ate:' |
        sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//' |
        head -1l | awk '{print $1, $3, $2,  $5 ,"GMT", $4 }' |
        sed 's/,//')" &>/dev/null

Даём права на исполнение:

chmod +x /etc/cron.daily/httpdate

В общем-то всё. Два разных адреса для проверки сети и получения времени из-за того, что ping не понимает адреса с http://, а wget не понимает без, и совершенно не хотелось нагромождать скрипт. Погрешность при таком методе синхронизации времени где-то 1-2 секунды если нет никаких проблем с сетью. Для меня такая погрешность не критична.


Понравилась статья? Поделись с друзьями!




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