135 lines
3.3 KiB
Bash
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
|