mirror of
https://github.com/unraid/webgui.git
synced 2026-01-07 10:10:05 -06:00
157 lines
3.5 KiB
Bash
Executable File
157 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# script: rc.ntpd
|
|
#
|
|
# Start/stop/restart ntpd.
|
|
#
|
|
# LimeTech - modified to initialize ntp.conf file from config
|
|
# Bergware - modified for Unraid OS, December 2024
|
|
|
|
DAEMON="NTP server daemon"
|
|
CALLER="ntp"
|
|
NTPD="/usr/sbin/ntpd"
|
|
OPTIONS="-g -u ntp:ntp"
|
|
CONF="/etc/ntp.conf"
|
|
CFG="/boot/config/plugins/dynamix/dynamix.cfg"
|
|
IDENT="/boot/config/ident.cfg"
|
|
|
|
# run & log functions
|
|
. /etc/rc.d/rc.runlog
|
|
|
|
# library functions
|
|
. /etc/rc.d/rc.library.source
|
|
|
|
ntpd_running(){
|
|
sleep 0.1
|
|
[[ $(pgrep --ns $$ -cf $NTPD) -gt 0 ]]
|
|
}
|
|
|
|
ntpd_build(){
|
|
[[ -f $CONF.orig ]] && cp $CONF.orig $CONF || cp $CONF $CONF.orig
|
|
echo "# Generated entries follow:" >>$CONF
|
|
echo "interface ignore wildcard" >>$CONF
|
|
if check && [[ -n $BIND ]]; then
|
|
# ignore unused protocol
|
|
[[ $IPV4 == no ]] && echo "interface ignore ipv4" >>$CONF
|
|
[[ $IPV6 == no ]] && echo "interface ignore ipv6" >>$CONF
|
|
# add listen interfaces
|
|
for NET in $BIND; do
|
|
echo "interface listen $NET" >>$CONF
|
|
done
|
|
fi
|
|
NTP_POLL=$(var NTP POLL $CFG)
|
|
# ntp poll interval may be adjusted to predefined values
|
|
if [[ -n $NTP_POLL ]]; then
|
|
MINPOLL="minpoll $NTP_POLL"
|
|
MAXPOLL="maxpoll $NTP_POLL"
|
|
fi
|
|
# allow ntp to use ptp as sync source
|
|
if [[ $(var PTP SYNC $CFG) != yes ]]; then
|
|
# add configured ntp servers or pools
|
|
for n in {1..4}; do
|
|
NTP="NTP_SERVER$n"
|
|
if [[ -n ${!NTP} ]]; then
|
|
# use either server or pool peers depending on remote ntp name
|
|
# pools use a round-robin mechanism to get a server out of the pool
|
|
[[ ${!NTP} =~ "pool" ]] && PEER=pool || PEER=server
|
|
echo "$PEER ${!NTP} iburst $MINPOLL $MAXPOLL" >>$CONF
|
|
fi
|
|
done
|
|
fi
|
|
}
|
|
|
|
ntpd_start(){
|
|
log "Starting $DAEMON..."
|
|
local REPLY
|
|
# read Unraid settings
|
|
[[ -r $IDENT ]] && . <(fromdos <$IDENT)
|
|
# if time sync not enabled, don't start ntp
|
|
if [[ $USE_NTP != yes ]]; then
|
|
REPLY="Service not enabled"
|
|
elif ntpd_running; then
|
|
REPLY="Already started"
|
|
else
|
|
# generate our config file
|
|
ntpd_build
|
|
# restore previously saved drift file if present
|
|
install --owner=ntp --group=ntp --mode=644 /boot/config/drift /var/lib/ntp 2>/dev/null
|
|
$NTPD $OPTIONS 2>/dev/null
|
|
if ntpd_running; then REPLY="Started"; else REPLY="Failed"; fi
|
|
fi
|
|
log "$DAEMON... $REPLY."
|
|
}
|
|
|
|
ntpd_stop(){
|
|
log "Stopping $DAEMON..."
|
|
local REPLY
|
|
if ! ntpd_running; then
|
|
REPLY="Already stopped"
|
|
else
|
|
if [[ -r /var/run/ntpd.pid ]]; then
|
|
kill -HUP $(cat /var/run/ntpd.pid)
|
|
rm -f /var/run/ntpd.pid
|
|
else
|
|
killall --ns $$ -HUP -q ntpd
|
|
fi
|
|
if ! ntpd_running; then REPLY="Stopped"; else REPLY="Failed"; fi
|
|
fi
|
|
# save the drift file if present
|
|
cp /var/lib/ntp/drift /boot/config 2>/dev/null
|
|
log "$DAEMON... $REPLY."
|
|
}
|
|
|
|
ntpd_restart(){
|
|
log "Restarting $DAEMON..."
|
|
ntpd_stop
|
|
sleep 1
|
|
ntpd_start
|
|
}
|
|
|
|
ntpd_reload(){
|
|
killall --ns $$ -HUP -q ntpd
|
|
. <(fromdos <$IDENT)
|
|
ntpd_build
|
|
$NTPD $OPTIONS 2>/dev/null
|
|
}
|
|
|
|
ntpd_update(){
|
|
if ntpd_running && check && [[ "$(this 'interface listen')" != "$BIND" ]]; then
|
|
log "Updating $DAEMON..."
|
|
ntpd_reload
|
|
fi
|
|
}
|
|
|
|
ntpd_status(){
|
|
if ntpd_running; then
|
|
echo "$DAEMON is currently running."
|
|
else
|
|
echo "$DAEMON is not running."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
'start')
|
|
ntpd_start
|
|
;;
|
|
'stop')
|
|
ntpd_stop
|
|
;;
|
|
'restart')
|
|
ntpd_restart
|
|
;;
|
|
'reload')
|
|
ntpd_reload
|
|
;;
|
|
'update')
|
|
ntpd_update
|
|
;;
|
|
'status')
|
|
ntpd_status
|
|
;;
|
|
*)
|
|
echo "Usage: $BASENAME start|stop|restart|reload|update|status"
|
|
exit 1
|
|
esac
|
|
exit 0
|