Eu duvido que exista algo bash específico nisso, a maior parte da "magia" está nos comandos externos. Então, algo como:
#!/bin/ash
pgrep vpnc >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
/etc/init.d/vpnc stop
sleep 1
pkill vpnc
sleep 1
pkill -9 vpnc
sleep 1
/etc/init.d/vpnc start
fi
Trabalhará supondo que você tenha o pgrep e o pkill instalados e que seu script de inicialização seja chamado vpnc
e resida em /etc/init.d
(e que ash
mora em /bin
). Largá-lo em qualquer lugar em $PATH
, defina o bit de execução ( chmod +x myscript
) e você simplesmente tem que chamá-lo pelo nome que você salvou como.
Os binários (e scripts) tradicionalmente instalados residiriam em /usr/local/bin
, não em /usr/lib
. Se isso não existir e não estiver no seu atual $PATH
, basta criar o diretório ( mkdir -p /usr/local/bin
) e editar o arquivo que define $PATH
(provavelmente algo abaixo de /etc
).
Note que com um pouco de esforço você pode incluir isso em um script que faça algo como:
#!/bin/ash
pgrep vpnc
if [ $? -eq 0 ]; then
ping -n -q -c 4 ip.at.other.side
if [ $? -ne 0 ]; then
/usr/local/bin/myscript
fi
fi
Chame isso de cron a cada N minutos e, quando a VPN estiver rodando e o ping para o IP do outro lado falhar, ela reiniciará a VPN.
Cuidado - Eu simplesmente joguei tudo junto da experiência, nenhum teste foi feito e eu nunca usei cinzas. Alguns ajustes ou retrabalhos podem ser necessários.
Ok, se você não tiver o cron, você pode incluir o segundo script como:
#!/bin/ash
while [ true ]; do
pgrep vpnc
if [ $? -eq 0 ]; then
ping -n -q -c 4 ip.at.other.side
if [ $? -ne 0 ]; then
/usr/local/bin/myscript
fi
fi
sleep 60
done
Para que seja executado em segundo plano, use nohup
:
nohup /usr/local/bin/mywrapper &
Você deve descobrir que há pelo menos um servidor que responde ao ping, possivelmente até mesmo ao ponto de extremidade da VPN. Se isso não funcionar, tente os servidores DNS ou roteadores (as pessoas raramente bloqueiam os roteadores).