smstools3.init (3520B)
1 #!/bin/sh /etc/rc.common 2 # Copyright (C) 2014 OpenWrt.org 3 # smsd initscript openwrt mod 4 5 START=99 6 STOP=99 7 8 EXTRA_COMMANDS="status" 9 EXTRA_HELP=" status View pid and service status " 10 11 # Set USER and GROUP, if necessary: 12 USER="" 13 GROUP="" 14 15 # If an unpriviledged user is selected, make sure that next two 16 # files are writable by that user: 17 PIDFILE="/var/run/smsd.pid" 18 INFOFILE="/var/run/smsd.working" 19 # Logfile can also be defined in here: 20 LOGFILE="/var/log/smsd.log" 21 22 DAEMON=/usr/local/bin/smsd 23 # A program which turns power off for couple of seconds: 24 RESETMODEMS=/usr/local/bin/smsd_resetmodems 25 NAME=smsd 26 PSOPT="" 27 28 # Set/edit this before starting service !!!!! 29 WRT_SPOOL=/var/spool 30 31 # Maximum time to stop smsd, after that it gets killed hardly: 32 MAXWAIT=45 33 34 boot() { 35 start 36 } 37 38 start() { 39 test -x $DAEMON || exit 0 40 41 echo "Creating minimum spool directories" 42 mkdir -p $WRT_SPOOL 43 mkdir -p $WRT_SPOOL/sms 44 mkdir -p $WRT_SPOOL/sms/incoming 45 mkdir -p $WRT_SPOOL/sms/outgoing 46 mkdir -p $WRT_SPOOL/sms/checked 47 mkdir -p $WRT_SPOOL/sms/failed 48 mkdir -p $WRT_SPOOL/sms/sent 49 50 echo -n "Starting SMS Daemon: " 51 MSG="." 52 ARGS="-n MAINPROCESS -p$PIDFILE -i$INFOFILE" 53 [ "x$USER" != x ] && ARGS="$ARGS -u$USER" 54 [ "x$GROUP" != x ] && ARGS="$ARGS -g$GROUP" 55 [ "x$LOGFILE" != x ] && ARGS="$ARGS -l$LOGFILE" 56 PID=`cat $PIDFILE 2>/dev/null` 57 if [ "x$PID" != x ]; then 58 if kill -0 $PID 2>/dev/null; then 59 MSG=" already running ($PID)." 60 else 61 PID="" 62 fi 63 fi 64 if [ "x$PID" = x ]; then 65 if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then 66 MSG=" already running." 67 else 68 $DAEMON $ARGS 69 sleep 1 70 PIDS=`ps $PSOPT | grep $NAME | grep -v grep` 71 [ "x$PIDS" = x ] && MSG=" failed." 72 fi 73 fi 74 echo "$NAME$MSG" 75 } 76 77 stop() { 78 if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then 79 PID=`cat $PIDFILE 2>/dev/null` 80 if [ "x$PID" != x ]; then 81 P=`kill -0 $PID 2>/dev/null` 82 [ "x$P" != x ] && PID="" 83 fi 84 if [ "x$PID" != x ]; then 85 kill $PID 86 else 87 kill `ps $PSOPT | grep $NAME | grep -v grep | awk '{print $1}'` >/dev/null 2>&1 88 fi 89 sleep 1 90 if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then 91 echo "Allowing $NAME to terminate gracefully within $MAXWAIT seconds" 92 infofound=0 93 dots=0 94 seconds=0 95 while ps $PSOPT | grep $NAME | grep -v grep >/dev/null; do 96 if [ $infofound -lt 1 ]; then 97 if [ -f $INFOFILE ]; then 98 infofound=1 99 if [ $dots -gt 0 ]; then 100 echo "" 101 dots=0 102 fi 103 $ECHO -n "$NAME is currently " 104 cat $INFOFILE 105 echo "Time counting is now disabled and we will wait until this job is complete." 106 fi 107 fi 108 [ $infofound -lt 1 ] && seconds=`expr $seconds + 1` 109 echo -n "." 110 dots=`expr $dots + 1` 111 if [ "$seconds" -ge $MAXWAIT ]; then 112 if [ $dots -gt 0 ]; then 113 echo "" 114 dots=0 115 fi 116 echo "Timeout occurred, killing $NAME hardly." 117 kill -9 `ps $PSOPT | grep $NAME | grep -v grep | awk '{print $1}'` >/dev/null 2>&1 118 [ -f $PIDFILE ] && rm $PIDFILE 119 seconds=0 120 fi 121 sleep 1 122 done 123 [ $dots -gt 0 ] && echo "" 124 #echo "$NAME is stopped." 125 fi 126 fi 127 } 128 129 restart() { 130 stop 131 start 132 } 133 134 135 status() { 136 PID=$(cat $PIDFILE) 137 138 test -e $PIDFILE 139 if [ $? == 0 ]; then 140 echo $NAME " running! pid $PID" 141 else 142 echo $NAME " not running !!!" 143 fi 144 } 145 146 reset() { 147 $0 stop 148 [ -f "$RESETMODEMS" ] && "$RESETMODEMS" 149 sleep 30 150 $0 start 151 } 152