| #!/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 |