* luci/contrib/olsr: fix initscript to not kill itself sometimes
[project/luci.git] / contrib / package / olsrd-luci / files / etc / init.d / olsrd
index 2cadcaf..54f5502 100755 (executable)
@@ -3,6 +3,10 @@
 # Special thanks to bittorf wireless ))
 START=50
 
+BIN=/usr/sbin/olsrd
+CONF=/var/etc/olsrd.conf
+PID=/var/run/olsrd.pid
+
 OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 IpVersion=4 AllowNoInt:bool=1 Pollrate=0.025 TcRedundancy=2 MprCoverage=3 LinkQualityFishEye=1 LinkQualityWinSize=100 LinkQualityDijkstraLimit=0+9.0 LinkQualityLevel=2 UseHysteresis:bool=0 FIBMetric=flat ClearScreen:bool=1 Willingness=3 LinkQualityAging=0.1 LinkQualityAlgorithm=etx_fpm'
 OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2'
 OLSRD_LOADPLUGIN_SCHEMA='ignore:internal library:internal Host:list Net:list2 Ping:list redistribute:list NonOlsrIf:list name:list lat lon latlon_infile HNA:list2 hosts:list2'
@@ -516,6 +520,14 @@ olsrd_write_config() {
 }
 
 start() {
+       ### check for running instance
+       if [ -s $PID ]; then
+               if kill -0 $(cat $PID) 2>&-; then
+                       echo "there is already a running instance ($(cat $PID))"
+                       return 1
+               fi
+       fi
+       
        SYSTEM_HOSTNAME=
        SYSTEM_LAT=
        SYSTEM_LON=
@@ -539,18 +551,26 @@ start() {
        config_foreach olsrd_find_config_file olsrd
 
        if [ -z "$OLSRD_CONFIG_FILE" ]; then
-               mkdir -p -- /var/etc/
-               olsrd_write_config > /var/etc/olsrd.conf
+               ### generate config
+               mkdir -p ${CONF%/*}
+               olsrd_write_config > $CONF
                if [ "$INTERFACES_COUNT" -gt 0 -a "$OLSRD_COUNT" -gt 0 ]; then
-                       OLSRD_CONFIG_FILE=/var/etc/olsrd.conf
+                       OLSRD_CONFIG_FILE=$CONF
                fi
        fi
 
        [ -z "$OLSRD_CONFIG_FILE" ] && return 1
 
-       olsrd -f "$OLSRD_CONFIG_FILE" -nofork < /dev/null > /dev/null &
+       ### start olsrd
+       start-stop-daemon -b -m -p $PID -x $BIN -S -- -f $CONF -nofork
 }
 
 stop() {
-       killall olsrd
+       ### stop olsrd
+       start-stop-daemon -q -p $PID -a ${BIN##*/} -K
+}
+
+restart() {
+       ### override generic restart because we need some time between stop and start
+       stop; sleep 3; start
 }