Выполните cronjob / периодическое задание, только если vpn произошел

У меня есть скрипт, который я хотел бы запустить, только если VPN произошла.

Я могу выполнить задание через OpenVPN, когда VPN запускает и закрывается, но я хотел бы, чтобы одно задание работало периодически, когда VPN произошла, и нисколько когда это снижается.

Что самый изящный путь состоит в том, чтобы достигнуть этого?

0
задан 1 March 2017 в 11:38

1 ответ

Быстрый ответ так вопрос имеет некоторое закрытие:

комментарий @user535733 является лучшим способом, по-моему. VPN отключена при запуске и запущена вручную в этой системе, systemd disable openvpn.

у меня есть следующее, добавленное к vpn-up.sh сценарий, который выполняется после того, как VPN запускается 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

сценарий запускает и генерирует файл piaport в /etc/cron.d, который запускает скрипт спустя один час после его поколения, и снова каждый час впоследствии.

vpn-down.sh скрипт, который запущен, когда сервис VPN останавливается 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

Для неожиданных перезагрузок, сценарий, названный cronjob, проверяет на существование VPN и удаляет cronjob /etc/cron.d/piaport, если это было перенесено:

часть сценария :

# 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

Всего, cronjob только выполняется при необходимости, и когда VPN произошла.

1
ответ дан 3 November 2019 в 16:48

Другие вопросы по тегам:

Похожие вопросы: