openvpnctl 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/bin/sh
  2. ##
  3. ## openvpnctl -- OpenVPN Daemon Control
  4. ##
  5. openvpn_bindir="@l_prefix@/sbin"
  6. openvpn_etcdir="@l_prefix@/etc/openvpn"
  7. openvpn_vardir="@l_prefix@/var/openvpn"
  8. name_full2short () {
  9. echo "$1" |\
  10. sed -e 's;^.*/\([^/]*\)$;\1;' \
  11. -e 's;\.conf$;;' \
  12. -e 's;^openvpn-;;' \
  13. -e 's;^$;default;'
  14. }
  15. name_short2full () {
  16. echo "$1" |\
  17. sed -e 's;^default$;;' \
  18. -e 's;^;openvpn-;'
  19. }
  20. cmd="$1"; shift
  21. case "$cmd" in
  22. list )
  23. for cfgfile in $openvpn_etcdir/*.conf; do
  24. [ ".`grep '^disable' $cfgfile`" != . ] && continue
  25. name_full2short "$cfgfile"
  26. done
  27. ;;
  28. start )
  29. name=`name_short2full "$1"`; shift
  30. if [ -f $openvpn_etcdir/$name.sh -a ".$name" != .openvpn ]; then
  31. sh $openvpn_etcdir/$name.sh start || exit $?
  32. fi
  33. $openvpn_bindir/openvpn \
  34. --daemon "$name" \
  35. --log-append $openvpn_vardir/$name.log \
  36. --writepid $openvpn_vardir/$name.pid \
  37. --status $openvpn_vardir/$name.status 60 \
  38. --config $openvpn_etcdir/$name.conf \
  39. --cd $openvpn_etcdir || exit $?
  40. ;;
  41. signal )
  42. name=`name_short2full "$1"`; shift
  43. [ -f $openvpn_vardir/$name.pid ] && kill -$2 `cat $openvpn_vardir/$name.pid`
  44. ;;
  45. reload )
  46. name=`name_short2full "$1"`; shift
  47. [ -f $openvpn_vardir/$name.pid ] && kill -USR1 `cat $openvpn_vardir/$name.pid`
  48. if [ -f $openvpn_etcdir/$name.sh ]; then
  49. sh $openvpn_etcdir/$name.sh reload || true
  50. fi
  51. ;;
  52. stop )
  53. name=`name_short2full "$1"`; shift
  54. [ -f $openvpn_vardir/$name.pid ] && kill -TERM `cat $openvpn_vardir/$name.pid`
  55. sleep 1
  56. if [ -f $openvpn_etcdir/$name.sh -a ".$name" != .openvpn ]; then
  57. sh $openvpn_etcdir/$name.sh stop || true
  58. fi
  59. rm -f $openvpn_vardir/$name.pid 2>/dev/null || true
  60. ;;
  61. esac