![通过监控公共 IP 改进 Bash 服务以启动/停止 torrent](https://linux22.com/image/212628/%E9%80%9A%E8%BF%87%E7%9B%91%E6%8E%A7%E5%85%AC%E5%85%B1%20IP%20%E6%94%B9%E8%BF%9B%20Bash%20%E6%9C%8D%E5%8A%A1%E4%BB%A5%E5%90%AF%E5%8A%A8%2F%E5%81%9C%E6%AD%A2%20torrent.png)
我正在寻找有关我的解决方案的反馈,以监控我的公共 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 分钟运行一次)