blob: e5af4b2301383399add500c6a82756937b1f0cc2 [file] [log] [blame]
Patrick Williamsb48b7b42016-08-17 15:04:38 -05001#!/bin/sh -e
2#
3# Original version by Robert Leslie
4# <rob@mars.org>, edited by iwj and cs
5# Modified for openvpn by Alberto Gonzalez Iniesta <agi@agi.as>
6# Modified for restarting / starting / stopping single tunnels by Richard Mueller <mueller@teamix.net>
Brad Bishop26bdd442019-08-16 17:08:17 -04007# Modified for respecting pid file on service start by Fabian Klemp <fabian.klemp@axino-group.com>
Patrick Williamsb48b7b42016-08-17 15:04:38 -05008
9test $DEBIAN_SCRIPT_DEBUG && set -v -x
10
11DAEMON=/usr/sbin/openvpn
12CONFIG_DIR=/etc/openvpn
13test -x $DAEMON || exit 0
14test -d $CONFIG_DIR || exit 0
15
16start_vpn () {
17 modprobe tun >/dev/null 2>&1 || true
Brad Bishop26bdd442019-08-16 17:08:17 -040018 start-stop-daemon --start --quiet --pidfile /var/run/openvpn.$NAME.pid \
19 --exec $DAEMON -- \
20 --daemon --writepid /var/run/openvpn.$NAME.pid \
21 --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR || rc="$?"
22 case $rc in
23 1) echo -n " ALREADY STARTED->";;
24 3) echo -n " FAILED->";;
25 esac
Patrick Williamsb48b7b42016-08-17 15:04:38 -050026 echo -n " $NAME"
27}
Brad Bishop26bdd442019-08-16 17:08:17 -040028
Patrick Williamsb48b7b42016-08-17 15:04:38 -050029stop_vpn () {
30 kill `cat $PIDFILE` || true
31 rm $PIDFILE
32}
33
34case "$1" in
35start)
36 echo -n "Starting openvpn:"
37
38 if test -z $2 ; then
39 for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do
40 NAME=${CONFIG%%.conf}
41 start_vpn
42 done
43 else
44 if test -e $CONFIG_DIR/$2.conf ; then
45 NAME=$2
46 start_vpn
47 else
48 echo -n " No such VPN: $2"
49 fi
50 fi
51 echo "."
52
53 ;;
54stop)
55 echo -n "Stopping openvpn:"
56
57 if test -z $2 ; then
58 for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
59 NAME=`echo $PIDFILE | cut -c18-`
60 NAME=${NAME%%.pid}
61 stop_vpn
62 echo -n " $NAME"
63 done
64 else
65 if test -e /var/run/openvpn.$2.pid ; then
66 PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null`
67 NAME=`echo $PIDFILE | cut -c18-`
68 NAME=${NAME%%.pid}
69 stop_vpn
70 echo -n " $NAME"
71 else
72 echo -n " No such VPN: $2"
73 fi
74 fi
75 echo "."
76 ;;
77# We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'.
78reload|force-reload)
79 echo -n "Reloading openvpn:"
80 for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
81 NAME=`echo $PIDFILE | cut -c18-`
82 NAME=${NAME%%.pid}
83# If openvpn if running under a different user than root we'll need to restart
84 if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then
85 stop_vpn
86 sleep 1
87 start_vpn
88 echo -n "(restarted)"
89 else
90 kill -HUP `cat $PIDFILE` || true
91# start-stop-daemon --stop --signal HUP --quiet --oknodo \
92# --exec $DAEMON --pidfile $PIDFILE
93 echo -n " $NAME"
94 fi
95 done
96 echo "."
97 ;;
98
99restart)
100 $0 stop $2
101 sleep 1
102 $0 start $2
103 ;;
104*)
105 echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2
106 exit 1
107 ;;
108esac
109
110exit 0
111
112# vim:set ai et sts=2 sw=2 tw=0: