Время сервера: часы, пояс и «Синхронизировать сейчас» в начале раздела «Сервер»
- живые часы сервера (сверка раз в 30 с), пояс, синхронизация, источник времени и расхождение с ним, сверка с часами компьютера администратора - выбор часового пояса прямо на странице (раньше — только в мастере) - «Синхронизировать сейчас»: bj-system-admin sync — разовая коррекция часов (chrony makestep, ntpd -gq, systemd-timesyncd); серверов нет или не отвечают, а свои не заданы — bj подбирает ВНИИФТРИ - мастер, шаг 12: кнопка «Синхронизировать» — та же синхронизация Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
# tz — часовой пояс сервера (BJ_EXTRA: "Europe/Moscow")
|
||||
# ntp — серверы времени (BJ_EXTRA: "ntp1.example.ru ntp2.example.ru"): ntpd, chrony или systemd-timesyncd —
|
||||
# что стоит на сервере. Время важно для подписей и обмена с НРД.
|
||||
# sync — поставить часы сейчас по серверам службы времени (не ждать её плавной подстройки)
|
||||
set -uo pipefail
|
||||
q() { python3 -c "import json,sys;print(json.dumps(sys.argv[1],ensure_ascii=False))" "$1"; }
|
||||
ok() { echo "{\"ok\":true,\"output\":$(q "$1")}"; }
|
||||
@@ -43,6 +44,32 @@ PY
|
||||
systemctl restart systemd-timesyncd || err "служба systemd-timesyncd не перезапустилась"
|
||||
ok "серверы времени: $servers (служба systemd-timesyncd)"
|
||||
fi ;;
|
||||
sync)
|
||||
synced() { hwclock --systohc >/dev/null 2>&1; ok "$1"; exit 0; }
|
||||
if systemctl is-active --quiet chrony || systemctl is-active --quiet chronyd; then
|
||||
chronyc -n sources 2>/dev/null | grep -q '^\^' || err "серверы времени не заданы"
|
||||
chronyc -a 'burst 4/4' >/dev/null 2>&1; sleep 8
|
||||
chronyc -a makestep >/dev/null 2>&1 || err "chrony не выполнил коррекцию часов"
|
||||
sleep 1; synced "время синхронизировано (chrony, расхождение $(chronyc -n tracking | sed -n 's/^System time *: //p'))"
|
||||
elif systemctl is-active --quiet ntp || systemctl is-active --quiet ntpd || { [ -f /etc/ntp.conf ] && ! systemctl is-active --quiet systemd-timesyncd; }; then
|
||||
srv=$(awk '/^(server|pool) / && !seen[$2]++ {print $2}' /etc/ntp.conf 2>/dev/null | xargs)
|
||||
[ -n "$srv" ] || err "серверы времени не заданы"
|
||||
command -v ntpd >/dev/null || err "нет программы ntpd"
|
||||
svc=ntp; systemctl is-active --quiet ntpd && svc=ntpd
|
||||
systemctl stop "$svc" >/dev/null 2>&1
|
||||
out=$(timeout 45 ntpd -gq 2>&1); rc=$?
|
||||
systemctl start "$svc" >/dev/null 2>&1
|
||||
[ $rc -eq 0 ] || err "серверы времени ($srv) не ответили за 45 с"
|
||||
synced "время синхронизировано (ntpd, серверы $srv)"
|
||||
else
|
||||
timedatectl set-ntp true >/dev/null 2>&1
|
||||
systemctl restart systemd-timesyncd || err "служба systemd-timesyncd не перезапустилась"
|
||||
for _ in $(seq 1 15); do
|
||||
[ "$(timedatectl show -p NTPSynchronized --value)" = yes ] && synced "время синхронизировано (systemd-timesyncd, сервер $(timedatectl show-timesync -p ServerName --value 2>/dev/null))"
|
||||
sleep 2
|
||||
done
|
||||
err "служба времени не получила время за 30 с — серверы времени недоступны"
|
||||
fi ;;
|
||||
tz)
|
||||
zone=$(printf '%s' "${BJ_EXTRA:-}" | tr -d ' ')
|
||||
[[ "$zone" =~ ^[A-Za-z]+(/[A-Za-z_+-]+)*$ ]] && [ -f "/usr/share/zoneinfo/$zone" ] || err "неизвестный часовой пояс: $zone"
|
||||
|
||||
Reference in New Issue
Block a user