slackbuilds/network/dnscrypt-proxy/rc.dnscrypt-proxy

135 lines
3.3 KiB
Bash

#!/bin/bash
CONFIGFILE="/etc/default/dnscrypt-proxy"
DAEMON="/usr/sbin/dnscrypt-proxy"
. $CONFIGFILE
start_instance() {
if [ ! -r ${DNSCRYPTCONFIG[$1]} ]; then
echo "No configuration for instance $1 found!"
return
fi
if [ -z ${PIDFILE[$1]} ]; then
echo "No PID configuration for instance $1 found!"
return
fi
if [ -z ${USER[$1]} ]; then
echo "No user configuration for instance $1 found!"
return
fi
if [ -r ${PIDFILE[$1]} ]; then
echo "dnscrypt-proxy (instance $1) already running!"
return
fi
mkdir -p $(dirname ${PIDFILE[$1]})
# The child (unprivileged) process needs write access or the PID will not
# be written.
chmod 0700 $(dirname ${PIDFILE[$1]})
chown ${USER[$1]} $(dirname ${PIDFILE[$1]})
# The new Go-based dnscrypt-proxy no longer has the ability to daemonize.
# In the absence of a standard Slackware daemon tool we'll use nohup. :(
nohup $DAEMON -config ${DNSCRYPTCONFIG[$1]} -pidfile ${PIDFILE[$1]} >> /dev/null 2>&1 &
}
stop_instance() {
if [ ! -r ${DNSCRYPTCONFIG[$1]} ]; then
echo "No configuration for instance $1 found!"
return
fi
if [ -z ${PIDFILE[$1]} ]; then
echo "No PID configuration for instance $1 found!"
return
fi
if [ ! -r ${PIDFILE[$1]} ]; then
echo "dnscrypt-proxy (instance $1) is not running!"
return
fi
echo "Stopping dnscrypt-proxy (instance $1)..."
kill $(cat ${PIDFILE[$1]})
}
status_instance() {
if [ ! -r ${DNSCRYPTCONFIG[$1]} ]; then
echo "No configuration for instance $1 found!"
return
fi
if [ -z ${PIDFILE[$1]} ]; then
echo "No PID configuration for instance $1 found!"
return
fi
if [ ! -r ${PIDFILE[$1]} ]; then
echo "dnscrypt-proxy (instance $1) is not running."
return
fi
PID=$(cat ${PIDFILE[$1]})
if [ -z "$PID" ]; then
echo "PID file is empty! dnscrypt-proxy (instance $1) does not appear to be running, but there is a stale PID file."
elif kill -0 $PID ; then
echo "dnscrypt-proxy (instance $1) is running."
else
echo "dnscrypt-proxy (instance $1) is not running, but there is a stale PID file."
fi
}
start() {
for i in `/usr/bin/seq 0 $((${#DNSCRYPTCONFIG[@]}-1))`
do
start_instance $i
done
}
stop() {
for i in `/usr/bin/seq 0 $((${#DNSCRYPTCONFIG[@]}-1))`
do
stop_instance $i
done
}
status() {
for i in `/usr/bin/seq 0 $((${#DNSCRYPTCONFIG[@]}-1))`
do
status_instance $i
done
}
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart')
stop
start
;;
'status')
status
;;
*_start)
INSTANCE=`echo $1 | /bin/cut -d '_' -f 1`
start_instance $INSTANCE
;;
*_stop)
INSTANCE=`echo $1 | /bin/cut -d '_' -f 1`
stop_instance $INSTANCE
;;
*_restart)
INSTANCE=`echo $1 | /bin/cut -d '_' -f 1`
stop_instance $INSTANCE
sleep 1
start_instance $INSTANCE
;;
*_status)
INSTANCE=`echo $1 | /bin/cut -d '_' -f 1`
status_instance $INSTANCE
;;
*)
echo "Usage: $0 {start|stop|restart|status|#_start|#_stop|#_restart}"
exit 1
;;
esac