openvpn.init 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/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>
  7. test $DEBIAN_SCRIPT_DEBUG && set -v -x
  8. DAEMON=/usr/sbin/openvpn
  9. CONFIG_DIR=/etc/openvpn
  10. test -x $DAEMON || exit 0
  11. test -d $CONFIG_DIR || exit 0
  12. start_vpn () {
  13. $DAEMON --daemon --writepid /var/run/openvpn.$NAME.pid \
  14. --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR || echo -n " FAILED->"
  15. echo -n " $NAME"
  16. }
  17. stop_vpn () {
  18. kill `cat $PIDFILE` || true
  19. rm $PIDFILE
  20. }
  21. case "$1" in
  22. start)
  23. echo -n "Starting openvpn:"
  24. if test -z $2 ; then
  25. for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do
  26. NAME=${CONFIG%%.conf}
  27. start_vpn
  28. done
  29. else
  30. if test -e $CONFIG_DIR/$2.conf ; then
  31. NAME=$2
  32. start_vpn
  33. else
  34. echo -n " No such VPN: $2"
  35. fi
  36. fi
  37. echo "."
  38. ;;
  39. stop)
  40. echo -n "Stopping openvpn:"
  41. if test -z $2 ; then
  42. for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
  43. NAME=`echo $PIDFILE | cut -c18-`
  44. NAME=${NAME%%.pid}
  45. stop_vpn
  46. echo -n " $NAME"
  47. done
  48. else
  49. if test -e /var/run/openvpn.$2.pid ; then
  50. PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null`
  51. NAME=`echo $PIDFILE | cut -c18-`
  52. NAME=${NAME%%.pid}
  53. stop_vpn
  54. echo -n " $NAME"
  55. else
  56. echo -n " No such VPN: $2"
  57. fi
  58. fi
  59. echo "."
  60. ;;
  61. # We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'.
  62. reload|force-reload)
  63. echo -n "Reloading openvpn:"
  64. for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
  65. NAME=`echo $PIDFILE | cut -c18-`
  66. NAME=${NAME%%.pid}
  67. # If openvpn if running under a different user than root we'll need to restart
  68. if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then
  69. stop_vpn
  70. sleep 1
  71. start_vpn
  72. echo -n "(restarted)"
  73. else
  74. kill -HUP `cat $PIDFILE` || true
  75. # start-stop-daemon --stop --signal HUP --quiet --oknodo \
  76. # --exec $DAEMON --pidfile $PIDFILE
  77. echo -n " $NAME"
  78. fi
  79. done
  80. echo "."
  81. ;;
  82. restart)
  83. $0 stop $2
  84. sleep 1
  85. $0 start $2
  86. ;;
  87. *)
  88. echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2
  89. exit 1
  90. ;;
  91. esac
  92. exit 0
  93. # vim:set ai et sts=2 sw=2 tw=0: