Executa um job cronjob / periodic somente se a vpn estiver ativa

0

Eu tenho um script que gostaria de executar somente se a VPN estiver ativa.

Eu posso executar um trabalho via OpenVPN quando a VPN é inicializada e encerrada, mas gostaria que um trabalho fosse executado periodicamente quando a VPN estivesse ativa, e não de todo quando estivesse inoperante.

Qual é a maneira mais elegante de conseguir isso?

    
por emk2203 01.03.2017 / 19:38

1 resposta

1

Resposta rápida para que a questão tenha algum encerramento:

O comentário de @ user535733 é a melhor maneira na minha opinião. A VPN está desativada na inicialização e iniciada manualmente neste sistema, por systemd disable openvpn .

Eu adicionei o seguinte ao script vpn-up.sh , que é executado depois que a VPN é iniciada por systemctl start openvpn :

#!/bin/bash

# Disable ipv6 to prevent leaks
echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6

# Start services e.g. transmission
service transmission-daemon start

# Heredoc for crontab entry in /etc/cron.d
MINUTE='date +%M'
tee /etc/cron.d/piaport <<-EOF >/dev/null
    # /etc/cron.d/piaport: crontab entries for pia-port script

    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

    ${MINUTE} * * * * root /usr/local/bin/pia-port >> /var/log/piaport.log 2>&1
EOF

O script é iniciado e gera um arquivo piaport in /etc/cron.d , que executa um script uma hora após sua geração e, novamente, a cada hora a seguir.

O script vpn-down.sh que é executado quando o serviço VPN é interrompido por systemctl stop openvpn :

#!/bin/sh

# Stop service like Transmission
service transmission-daemon stop

# Prevent DNS leaks 
/etc/openvpn/update-resolv-conf

# Reenable ipv6
echo 0 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6

# Remove cronjob / heredoc
rm /etc/cron.d/piaport

Para reinicializações inesperadas, o script chamado pelo cronjob verifica a existência da VPN e exclui o cronjob /etc/cron.d/piaport se ele foi deixado:

parte do script :

# Check for tun0
tuncheck=$( { /sbin/ifconfig tun0; } 2>&1 )

tunnotfound="not found"
if [ "${tuncheck/$tunnotfound}" = "$tuncheck" ] ; then
  echo "- VPN tunnel appears to be up and connected (Good!)"
else
  echo "Error detected! tun0 does not exist."
  echo "Please make sure both internet and the VPN is connected!"
  echo ""
  echo "Then run this script again!"
  echo ""
  [[ -f /etc/cron.d/piaport ]] && rm -f /etc/cron.d/piaport
  exit

No total, o cronjob só é executado quando necessário e quando a VPN está ativa.

    
por emk2203 05.03.2017 / 15:07