通过监控公共 IP 改进 Bash 服务以启动/停止 torrent

通过监控公共 IP 改进 Bash 服务以启动/停止 torrent

我正在寻找有关我的解决方案的反馈,以监控我的公共 IP 进行种子下载。

根据 icanhazip 检查公共 IP。如果 VPN 未激活,则暂停所有种子。如果 VPN 处于活动状态,则会检查正在下载的任何种子。如果至少有一个正在下载,则所有种子都会启动/排队,否则不会执行任何操作,因为所有种子都已暂停。

#!/bin/bash

#Torrent/VPN Watch Service

while :
do
ip=$(curl -s icanhazip.com)
pchk=$(transmission-remote -tall -i | grep -a State | grep -ao Down | head -1)
if [ "$ip" = xxx.xxx.xxx.xxx ] ; then
    date
        echo "WARNING! The Current IP is: $ip"
        echo "Torrents are being stopped!"
    echo "Openvpn is being restarted!"
        echo
    sleep 5
        /usr/bin/transmission-remote -tall --stop > /dev/null 2>&1
        pkill -9 screen
    screen -wipe > /dev/null 2>&1
        pkill -9 openvpn
    screen -dmS openvpn /usr/sbin/openvpn /usr/local/sbin/tvw/file.ovpn
fi
if [ "$pchk" = "Down" ] ; then
    date
    echo "The Current IP is: $ip"
    echo "Torrents are active!"
    echo
    sleep 5
    /usr/bin/transmission-remote -tall --start > /dev/null 2>&1
else
    date
        echo "Current IP: $ip"
    echo "All torrents are paused."
    echo
    sleep 5
fi
done
exit

答案1

仅在 MacOS 上测试

你真正想做的是:检查你的VPN是否正在运行;确定您的VPN ip;确保您的VPN ip与Transmission的BindAddressIPv4中定义的ip相同;如果是,那就没问题;如果没有,请在 BindAddressIPv4 中设置正确的 ip 并重新启动 Transmission

以下行将获取您的 vpn utun 接口和 ip

read -r vpninterface vpnip < <(/sbin/ifconfig -a | awk '/^[a-zA-Z]/{sub(/:/,""); x=$1}/inet /{print x, $2}' | awk '/utun/')

ifconfig + 1st awk 为每个接口提供一个行,显示“接口名称”和“ip”。第二个 awk 只是获取 utun 信息。使用 BindAddressIPv4 ip 验证 utun ip 的检查应该以一定的间隔运行(我的每 15 分钟运行一次)

相关内容