mirror of
https://github.com/novatiq/packages.git
synced 2026-04-30 07:28:39 +01:00
smstools3: Move init script to use procd
* properly install config file * prevent smsd from starting right after installation to prevent loss of data (make default device unavailable by turning configuration into comments) * move init script to procd * update init script priority to sane value * log to syslog - at the moment via stdout and procd this is a workaround to force smsd to stay in the foreground * the init script can't do a modem reset anymore use an alarmhandler script instead * add a local patch to make all processes terminate if the main process dies * take over the package as new maintainer Signed-off-by: Harald Geyer <harald@ccbib.org>
This commit is contained in:
@@ -1,43 +1,21 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2014 OpenWrt.org
|
||||
# smsd initscript openwrt mod
|
||||
# Copyright (C) 2014-2018 OpenWrt.org
|
||||
|
||||
START=99
|
||||
STOP=99
|
||||
START=94
|
||||
|
||||
EXTRA_COMMANDS="status"
|
||||
EXTRA_HELP=" status View pid and service status "
|
||||
|
||||
# Set USER and GROUP, if necessary:
|
||||
USER=""
|
||||
GROUP=""
|
||||
USE_PROCD=1
|
||||
|
||||
# If an unpriviledged user is selected, make sure that next two
|
||||
# files are writable by that user:
|
||||
PIDFILE="/var/run/smsd.pid"
|
||||
INFOFILE="/var/run/smsd.working"
|
||||
# Logfile can also be defined in here:
|
||||
LOGFILE="/var/log/smsd.log"
|
||||
|
||||
DAEMON=/usr/bin/smsd
|
||||
# A program which turns power off for couple of seconds:
|
||||
RESETMODEMS=/usr/bin/smsd_resetmodems
|
||||
NAME=smsd
|
||||
PSOPT=""
|
||||
|
||||
# Set/edit this before starting service !!!!!
|
||||
WRT_SPOOL=/var/spool
|
||||
|
||||
# Maximum time to stop smsd, after that it gets killed hardly:
|
||||
MAXWAIT=45
|
||||
|
||||
boot() {
|
||||
start
|
||||
}
|
||||
|
||||
start() {
|
||||
test -x $DAEMON || exit 0
|
||||
|
||||
start_service() {
|
||||
echo "Creating minimum spool directories"
|
||||
mkdir -p $WRT_SPOOL
|
||||
mkdir -p $WRT_SPOOL/sms
|
||||
@@ -47,106 +25,13 @@ start() {
|
||||
mkdir -p $WRT_SPOOL/sms/failed
|
||||
mkdir -p $WRT_SPOOL/sms/sent
|
||||
|
||||
echo -n "Starting SMS Daemon: "
|
||||
MSG="."
|
||||
ARGS="-n MAINPROCESS -p$PIDFILE -i$INFOFILE"
|
||||
[ "x$USER" != x ] && ARGS="$ARGS -u$USER"
|
||||
[ "x$GROUP" != x ] && ARGS="$ARGS -g$GROUP"
|
||||
[ "x$LOGFILE" != x ] && ARGS="$ARGS -l$LOGFILE"
|
||||
PID=`cat $PIDFILE 2>/dev/null`
|
||||
if [ "x$PID" != x ]; then
|
||||
if kill -0 $PID 2>/dev/null; then
|
||||
MSG=" already running ($PID)."
|
||||
else
|
||||
PID=""
|
||||
fi
|
||||
fi
|
||||
if [ "x$PID" = x ]; then
|
||||
if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then
|
||||
MSG=" already running."
|
||||
else
|
||||
$DAEMON $ARGS
|
||||
sleep 1
|
||||
PIDS=`ps $PSOPT | grep $NAME | grep -v grep`
|
||||
[ "x$PIDS" = x ] && MSG=" failed."
|
||||
fi
|
||||
fi
|
||||
echo "$NAME$MSG"
|
||||
}
|
||||
procd_open_instance
|
||||
|
||||
stop() {
|
||||
if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then
|
||||
PID=`cat $PIDFILE 2>/dev/null`
|
||||
if [ "x$PID" != x ]; then
|
||||
P=`kill -0 $PID 2>/dev/null`
|
||||
[ "x$P" != x ] && PID=""
|
||||
fi
|
||||
if [ "x$PID" != x ]; then
|
||||
kill $PID
|
||||
else
|
||||
kill `ps $PSOPT | grep $NAME | grep -v grep | awk '{print $1}'` >/dev/null 2>&1
|
||||
fi
|
||||
sleep 1
|
||||
if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then
|
||||
echo "Allowing $NAME to terminate gracefully within $MAXWAIT seconds"
|
||||
infofound=0
|
||||
dots=0
|
||||
seconds=0
|
||||
while ps $PSOPT | grep $NAME | grep -v grep >/dev/null; do
|
||||
if [ $infofound -lt 1 ]; then
|
||||
if [ -f $INFOFILE ]; then
|
||||
infofound=1
|
||||
if [ $dots -gt 0 ]; then
|
||||
echo ""
|
||||
dots=0
|
||||
fi
|
||||
$ECHO -n "$NAME is currently "
|
||||
cat $INFOFILE
|
||||
echo "Time counting is now disabled and we will wait until this job is complete."
|
||||
fi
|
||||
fi
|
||||
[ $infofound -lt 1 ] && seconds=`expr $seconds + 1`
|
||||
echo -n "."
|
||||
dots=`expr $dots + 1`
|
||||
if [ "$seconds" -ge $MAXWAIT ]; then
|
||||
if [ $dots -gt 0 ]; then
|
||||
echo ""
|
||||
dots=0
|
||||
fi
|
||||
echo "Timeout occurred, killing $NAME hardly."
|
||||
kill -9 `ps $PSOPT | grep $NAME | grep -v grep | awk '{print $1}'` >/dev/null 2>&1
|
||||
[ -f $PIDFILE ] && rm $PIDFILE
|
||||
seconds=0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
[ $dots -gt 0 ] && echo ""
|
||||
#echo "$NAME is stopped."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
procd_set_param command $DAEMON -n MAINPROCESS -p$PIDFILE -i$INFOFILE
|
||||
procd_set_param respawn
|
||||
procd_set_param stdout 1
|
||||
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
|
||||
status() {
|
||||
PID=$(cat $PIDFILE)
|
||||
|
||||
test -e $PIDFILE
|
||||
if [ $? == 0 ]; then
|
||||
echo $NAME " running! pid $PID"
|
||||
else
|
||||
echo $NAME " not running !!!"
|
||||
fi
|
||||
}
|
||||
|
||||
reset() {
|
||||
$0 stop
|
||||
[ -f "$RESETMODEMS" ] && "$RESETMODEMS"
|
||||
sleep 30
|
||||
$0 start
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user