141 lines
3.2 KiB
Bash
141 lines
3.2 KiB
Bash
#!/bin/sh
|
|
|
|
NAME=freeswitch
|
|
COMMAND=/etc/init.d/$NAME
|
|
|
|
LOGGER="/usr/bin/logger -t $NAME-hotplug"
|
|
LOG_ERR="$LOGGER -p user.err --"
|
|
LOG_NOTICE="$LOGGER -p user.notice --"
|
|
|
|
[ "$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_NOTICE 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_NOTICE "$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_NOTICE "$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_NOTICE 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_ERR failed to extract stratum from ntpd
|
|
notReady="unable to extract stratum"
|
|
else
|
|
$LOG_NOTICE 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_ERR 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_NOTICE 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_NOTICE system time in sync
|
|
fi
|
|
|
|
}
|
|
|
|
$COMMAND start &> /dev/null
|
|
sleep 1
|
|
pidof $NAME &>/dev/null
|
|
if [ $? -eq 0 ]; then
|
|
$LOG_NOTICE started $NAME due to \"ifup "$INTERFACE"\" event
|
|
else
|
|
$LOG_ERR start of $NAME due to \"ifup "$INTERFACE"\" event failed
|
|
exit 1
|
|
fi
|