This adds a term_timeout uci option which can be used to change the default timeout that procd uses while waiting for freeswitch to exit once the TERM signal is sent. freeswitch may take a bit longer to exit, so adding this option is likely appreciated. By default procd's default is used, though. Logging is updated in init script and hotplug script. The used facility is changed from user to daemon, for instance. An issue was fixed in the parsing of the ntpq output. In case a positive offset was printed the parsing failed. Apparently ntpq is now adding a '+', so this is now accounted for. Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
142 lines
3.3 KiB
Bash
142 lines
3.3 KiB
Bash
#!/bin/sh
|
|
|
|
NAME=freeswitch
|
|
COMMAND=/etc/init.d/$NAME
|
|
|
|
LOGGER="/usr/bin/logger -t $NAME-hotplug"
|
|
LOG_ERR="$LOGGER -p daemon.err --"
|
|
LOG_INFO="$LOGGER -p daemon.info --"
|
|
LOG_WARN="$LOGGER -p daemon.warn --"
|
|
|
|
[ "$ACTION" = ifup ] || exit 0
|
|
|
|
. /lib/functions.sh
|
|
config_load $NAME
|
|
|
|
config_get interface hotplug interface
|
|
|
|
[ "$INTERFACE" = "$interface" ] || exit 0
|
|
|
|
pidof $NAME &> /dev/null
|
|
if [ $? -eq 0 ]; then
|
|
$LOG_INFO stopping $NAME
|
|
$COMMAND stop &> /dev/null
|
|
fi
|
|
|
|
config_get timeout hotplug timeout 60
|
|
|
|
[ "$timeout" -gt 0 ] 2> /dev/null || unset timeout
|
|
timeout="${timeout:-60}"
|
|
|
|
config_get mount_point hotplug mount_point
|
|
|
|
# Mount condition, idea lifted from OpenWrt Wiki
|
|
[ -n "$mount_point" ] && {
|
|
|
|
if ! [ -d "$mount_point" ]; then
|
|
$LOG_ERR "$mount_point" not a valid mount point
|
|
exit 1
|
|
fi
|
|
|
|
mnt="$mount_point"
|
|
notReady=start
|
|
tmp_timeout=$timeout
|
|
|
|
while [ -n "$notReady" -a $tmp_timeout -gt 0 ]; do
|
|
if [ "$notReady" != start ]; then
|
|
$LOG_INFO "$mnt" not yet mounted, timeout in $tmp_timeout s
|
|
sleep 5
|
|
tmp_timeout=$(($tmp_timeout-5))
|
|
fi
|
|
|
|
notReady=
|
|
|
|
result=$(cat /proc/mounts | awk '{print $2}' | grep "^$mnt\$")
|
|
if [ -z "$result" ]; then
|
|
notReady="$mnt not ready yet"
|
|
fi
|
|
done
|
|
|
|
if [ -n "$notReady" ]; then
|
|
$LOG_ERR "$mnt" still not mounted
|
|
$LOG_ERR not starting $NAME
|
|
exit 1
|
|
else
|
|
$LOG_INFO "$mnt" mounted
|
|
fi
|
|
|
|
}
|
|
|
|
config_get_bool ntpd hotplug ntpd 0
|
|
|
|
# ntpd condition
|
|
[ $ntpd -eq 1 ] && {
|
|
|
|
type ntpq &> /dev/null
|
|
[ $? -eq 0 ] || {
|
|
$LOG_ERR ntpq utility not found
|
|
exit 1
|
|
}
|
|
|
|
pidof ntpd &> /dev/null || {
|
|
$LOG_ERR ntpd not running
|
|
exit 1
|
|
}
|
|
|
|
notReady=start
|
|
tmp_timeout=$timeout
|
|
|
|
while [ -n "$notReady" -a $tmp_timeout -gt 0 ]; do
|
|
if [ "$notReady" != start ]; then
|
|
$LOG_INFO system time not in sync yet, timeout in $tmp_timeout s
|
|
sleep 5
|
|
tmp_timeout=$(($tmp_timeout-5))
|
|
fi
|
|
|
|
notReady=
|
|
|
|
result=$(ntpq -c 'timeout 300' -c 'rv 0 stratum' 2> /dev/null | \
|
|
awk -F '=' '{print $2}' | grep -o -E '^[0-9]+')
|
|
if [ -z $result ]; then
|
|
$LOG_WARN failed to extract stratum from ntpd
|
|
notReady="unable to extract stratum"
|
|
else
|
|
$LOG_INFO ntpd stratum $result
|
|
if [ $result -lt 16 ] 2> /dev/null; then
|
|
result=$(ntpq -c 'timeout 300' -c 'rv 0 offset' 2> /dev/null \
|
|
| awk -F '=' '{print $2}' | grep -o -E '^[-+]?[0-9]+')
|
|
if [ -z $result ]; then
|
|
$LOG_WARN failed to extract offset from ntpd
|
|
notReady="unable to extract offset"
|
|
else
|
|
# "-0" looks stupid, so remove "-"
|
|
result=$(echo $result | grep -o '[0-9]*')
|
|
$LOG_INFO ntpd to system time offset \+\/\- $result ms
|
|
# If offset < 100 ms consider system time in sync
|
|
[ $result -lt 100 ] || notReady="system time not in sync yet"
|
|
fi
|
|
else
|
|
notReady="ntpd not in sync yet"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ -n "$notReady" ]; then
|
|
$LOG_ERR system time still not in sync
|
|
$LOG_ERR not starting $NAME
|
|
exit 1
|
|
else
|
|
$LOG_INFO system time in sync
|
|
fi
|
|
|
|
}
|
|
|
|
$COMMAND start &> /dev/null
|
|
sleep 1
|
|
pidof $NAME &>/dev/null
|
|
if [ $? -eq 0 ]; then
|
|
$LOG_INFO started $NAME due to \"ifup "$INTERFACE"\" event
|
|
else
|
|
$LOG_ERR start of $NAME due to \"ifup "$INTERFACE"\" event failed
|
|
exit 1
|
|
fi
|