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