blob: 86f319225822902354ba1c10233cd367440a658d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
#!/bin/sh
#
# /etc/rc.d/rc.openvpn
#
# Start/stop/restart the openvpn daemon.
#
# By default, this script will start/stop/restart a daemon for every *.conf
# file found in /etc/openvpn.
#
# To work with a single connection, add the name of the config file:
# /etc/rc.d/rc.openvpn start configfile.conf
#
# You may also use a config file not found in /etc/openvpn by providing a
# complete path:
# /etc/rc.d/rc.openvpn start /path/to/some/other/configfile.conf
#
# The name of a config file provided with a complete path should not match
# the name of any config file present in the /etc/openvpn directory.
ovpn_start() {
if [ -x /usr/sbin/openvpn ]; then
if [ -z "$1" ]; then # start OpenVPN for all config files:
if /bin/ls /etc/openvpn/*.conf 1> /dev/null 2> /dev/null ; then
for config in /etc/openvpn/*.conf ; do
echo "Starting OpenVPN: /usr/sbin/openvpn --daemon --writepid /run/openvpn/$(basename $config).pid --user nobody --group nobody --config $config"
/usr/sbin/openvpn --daemon --writepid /run/openvpn/$(basename $config).pid --user nobody --group nobody --config $config
done
else
echo "Unable to start OpenVPN - no .conf files found in /etc/openvpn/."
fi
else # start OpenVPN for one config file:
if [ -r "$1" ]; then
echo "Starting OpenVPN: /usr/sbin/openvpn --daemon --writepid /run/openvpn/$(basename $1).pid --user nobody --group nobody --config $1"
/usr/sbin/openvpn --daemon --writepid /run/openvpn/$(basename $1).pid --user nobody --group nobody --config $1
else # config file is missing:
echo "Error starting OpenVPN: config file $1 is missing."
fi
fi
fi
}
ovpn_stop() {
# Note: OpenVPN has a bad habit of leaving stale pid files around when exiting.
# Maybe it would be better to just use killall unless called for one config?
if [ -z "$1" ]; then # stop OpenVPN for all pid files:
if /bin/ls /run/openvpn/*.pid 1> /dev/null 2> /dev/null ; then
for pid in /run/openvpn/*.pid ; do
echo "Stopping OpenVPN for pid file $pid..."
kill $(cat $pid)
rm -f $pid
done
else
echo "Warning: no pid files found in /run/openvpn/. Using killall to stop any OpenVPN processes."
killall openvpn
fi
else # stop OpenVPN for one config file:
if [ -r /run/openvpn/$(basename ${1}).pid ]; then
echo "Stopping OpenVPN for config file ${1}..."
kill $(cat /run/openvpn/$(basename ${1}).pid)
rm -f /run/openvpn/$(basename ${1}).pid
else
echo "Error stopping OpenVPN: no such pid file /run/openvpn/$(basename ${1}).pid"
fi
fi
}
ovpn_restart() {
if [ ! -z "$1" ]; then # restart for all config files:
ovpn_stop
sleep 2
ovpn_start
else # restart for one config file only:
ovpn_stop $1
sleep 2
ovpn_start $1
fi
}
ovpn_status() {
if /bin/ls /run/openvpn/*.pid 1> /dev/null 2> /dev/null ; then
echo "Currently running OpenVPN processes according to .pid files in /run/openvpn:"
for pid in /run/openvpn/*.pid ; do
echo " $(basename $pid) ($(cat $pid))"
done
else
echo "No .pid files found in /run/openvpn."
fi
}
# Create PID directory if it doesn't exist:
if [ ! -d /run/openvpn ]; then
mkdir -p /run/openvpn
fi
case "$1" in
'start')
ovpn_start $2
;;
'stop')
ovpn_stop $2
;;
'restart')
ovpn_restart $2
;;
'status')
ovpn_status
;;
*)
echo "Usage: $0 {start|stop|restart}"
esac
|