201 lines
4.6 KiB
Bash
Executable File
201 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Init file for Rx3 network setup
|
|
#
|
|
# chkconfig: 2345 55 25
|
|
# description: Rx3 VPN supervisor
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: rx3-vpn
|
|
# Required-Start: $network
|
|
# Required-Stop: $network
|
|
# Default-Start: 2 3 4 5
|
|
# Short-Description: Rx3 VPN supervisor
|
|
# Description: Rx3 VPN supervisor
|
|
### END INIT INFO
|
|
|
|
# source function library
|
|
. /etc/rc.d/init.d/functions
|
|
|
|
|
|
[ -e /etc/sysconfig/rx3-vpn ] && . /etc/sysconfig/rx3-vpn
|
|
|
|
RETVAL=0
|
|
prog="rx3-vpn"
|
|
|
|
LOCK_FILE=/var/lock/subsys/rx3-vpn
|
|
PID_FILE=/var/run/rx3-vpn.pid
|
|
LOG_FILE=/var/log/rx3-vpn.log
|
|
STATUS_FILE=/var/log/rx3-vpn.status
|
|
|
|
unset LC_PAPER LC_ADDRESS LC_MONETARY LC_NUMERIC LC_TELEPHONE LC_MESSAGES LC_IDENTIFICATION LC_COLLATE LANG LC_MEASUREMENT LANGUAGE LC_CTYPE LC_TIME LC_NAME
|
|
|
|
|
|
|
|
rx3_vpn_supervisor()
|
|
{
|
|
|
|
job_id=0
|
|
|
|
for blk in ${VPN_EXT_LIST}
|
|
do
|
|
OIFS=${IFS}
|
|
IFS=:
|
|
set $blk
|
|
dev=$1
|
|
conf=$2
|
|
table=$3
|
|
name=$4
|
|
IFS=${OIFS}
|
|
|
|
case ${dev}
|
|
in
|
|
"eth"*)
|
|
;;
|
|
|
|
"tun"*)
|
|
config_file=/etc/openvpn/ext-client-${dev}.conf
|
|
template_file=/etc/openvpn/template/ext-client-tunx.conf
|
|
mng_port=$((2330+$(echo ${dev} | sed -e "s/tun//")))
|
|
job_pid[${job_id}]="0"
|
|
# job_cmd[${job_id}]="/usr/sbin/openvpn --config /etc/openvpn/${conf}-client.conf --dev ${dev} --daemon"
|
|
job_cmd[${job_id}]="/usr/sbin/openvpn --config ${config_file} --dev ${dev} --daemon"
|
|
|
|
/bin/rm -f ${config_file} 2>/dev/null
|
|
sed -e "s/TARGET-CFG/${conf}-client.conf/" -e "s/VPN-DEVICE/${dev}/" -e "s/MNG-PORT/${mng_port}/" <${template_file} >${config_file}
|
|
|
|
echo >>${LOG_FILE} $(date) "Loading config: VPN[${job_id}] Name: [${name}] Cmd: [${job_cmd[${job_id}]}]"
|
|
job_id=$((${job_id} + 1))
|
|
;;
|
|
|
|
"ppp"*)
|
|
host=$(grep "Server IP:" /etc/ppp/peers/${conf} | cut -d ' ' -f 4-4)
|
|
unit=$(echo ${dev} | sed "s/ppp//")
|
|
|
|
job_pid[${job_id}]="0"
|
|
job_cmd[${job_id}]="/usr/sbin/pptp --debug ${host} call ${conf} unit ${unit}"
|
|
|
|
echo >>${LOG_FILE} $(date) "Loading config: VPN[${job_id}] Name: [${name}] Cmd: [${job_cmd[${job_id}]}]"
|
|
job_id=$((${job_id} + 1))
|
|
;;
|
|
esac
|
|
done
|
|
|
|
job_nb=${job_id}
|
|
|
|
job_id=0
|
|
|
|
while [[ 1 ]]
|
|
do
|
|
kill -0 ${job_pid[${job_id}]} 2>/dev/null
|
|
rc=$?
|
|
|
|
if [[ ${job_pid[${job_id}]} == 0 ]] || [[ $rc != 0 ]]
|
|
then
|
|
echo >> ${LOG_FILE} $(date) "Restarting command: [${job_cmd[${job_id}]}]..."
|
|
|
|
eval ${job_cmd[${job_id}]}
|
|
job_pid[${job_id}]=$( ps aux | grep "${job_cmd[${job_id}]}" | grep -v grep | head -1 | awk '{print $2}')
|
|
job_date[${job_id}]="$(date)"
|
|
|
|
echo >> ${LOG_FILE} $(date) "PId: [${job_pid[${job_id}]}] !"
|
|
fi
|
|
|
|
job_id=$((${job_id} + 1))
|
|
|
|
if [[ ${job_id} -ge ${job_nb} ]]
|
|
then
|
|
job_id=0
|
|
>${STATUS_FILE}
|
|
|
|
while [[ ${job_id} -lt ${job_nb} ]]
|
|
do
|
|
echo >>${STATUS_FILE} "PId: [${job_pid[${job_id}]}] Date: [${job_date[${job_id}]}] Cmd: [${job_cmd[${job_id}]}]"
|
|
job_id=$((${job_id} + 1))
|
|
done
|
|
|
|
job_id=0
|
|
sleep 30
|
|
fi
|
|
done
|
|
}
|
|
|
|
|
|
|
|
start()
|
|
{
|
|
gprintf "Starting %s:" "$prog"
|
|
if [ -r ${LOCK_FILE} ]
|
|
then
|
|
success "already started"
|
|
RETVAL=0
|
|
else
|
|
rx3_vpn_supervisor &
|
|
echo "$!" >${PID_FILE}
|
|
|
|
RETVAL=$?
|
|
[ "$RETVAL" = 0 ] && success "startup" || failure "startup"
|
|
[ "$RETVAL" = 0 ] && touch ${LOCK_FILE}
|
|
fi
|
|
echo
|
|
}
|
|
|
|
|
|
|
|
stop()
|
|
{
|
|
gprintf "Stopping %s:" "$prog"
|
|
if [ -r ${LOCK_FILE} ]
|
|
then
|
|
echo >> ${LOG_FILE} $(date) "Killing daemon: [$(cat ${PID_FILE})]..."
|
|
kill -15 $(cat ${PID_FILE})
|
|
|
|
while read stat
|
|
do
|
|
echo >> ${LOG_FILE} $(date) "Killing VPN: [$stat] [$(echo "$stat" | sed -e 's/PId: \[//' -e 's/\].*//')]..."
|
|
kill -15 $(echo "$stat" | sed -e 's/PId: \[//' -e 's/\].*//') 2>/dev/null 2>&1
|
|
done <${STATUS_FILE}
|
|
|
|
# RETVAL=$?
|
|
RETVAL=0
|
|
[ "$RETVAL" = 0 ] && success "stop" || failure "stop"
|
|
else
|
|
success "already stopped"
|
|
RETVAL=0
|
|
fi
|
|
[ "$RETVAL" = 0 ] && rm -f ${LOCK_FILE} && rm -f ${PID_FILE} && rm -f ${STATUS_FILE}
|
|
echo
|
|
}
|
|
|
|
|
|
|
|
status()
|
|
{
|
|
if [ -f ${STATUS_FILE} ]; then
|
|
cat ${STATUS_FILE}
|
|
fi
|
|
}
|
|
|
|
|
|
|
|
case "$1" in
|
|
start)
|
|
start
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
restart)
|
|
stop
|
|
sleep 1
|
|
start
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
*)
|
|
gprintf "Usage: %s {start|stop|restart|status}\n" "$0"
|
|
RETVAL=1
|
|
esac
|
|
exit $RETVAL
|