blob: 93b5a20eec9e65a5bdd37cd1db3c8fa8cb524703 [file] [log] [blame]
#!/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