telephony/net/freeswitch/files/freeswitch.hotplug
Sebastian Kemper 601188d0ff freeswitch: rework init & hotplug
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>
2021-03-26 22:22:20 +01:00

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