linux Bash:定期启动通知以提醒进程正在等待结束

eoigrqb6  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(143)

我有一个别名在我的bashrc谁关闭我的VPN等待按下一个键,然后再次启动我的VPN。但有时我忘了按下键重新启动我的VPN,所以我尝试做的是定期(例如每2分钟)我想要一个通知来提醒我我的VPN关闭)。
别名

alias vpnd='sudo net down && read -n1 -p"Press a key to reactivate the VPN..." && sudo net up'

而net命令

#!/bin/bash                                                                                                                                                                                                                                  

[[ ( "$1" == "up" ) || ( "$1" == "down" ) ]] && wg-quick "$1" wg0 &> /dev/null

我知道notify-send命令和sleep命令,但不知道如何将它们合并组合起来使其工作。理想情况下,如果我可以避免外部进程,并在一行别名中包含所有内容,那么必须这样做
谢谢你的任何建议
编辑1:这个别名的目的是暂时停用我的VPN访问一些网站谁阻止你,如果你使用VPN。所以只有几分钟。我喜欢今天的工作方式,只是想加一个提醒
编辑2:感谢@freeman的帮助。现在的别名是这样的:

alias vpnd='sudo net down && echo "Press a key to reactivate the VPN..." && while true; do sleep 120; read -t 1 -n 1 && sudo net up && break || [[ $(ip a | grep -q "wg0") ]] || notify-send -t 2000 -i "/usr/share/icons/Contrast\
High/256x256/status/software-update-urgent.png" "WARNING" "VPN idle"; done'
3ks5zfa0

3ks5zfa01#

您可以编辑别名,使其包含每2分钟运行一次的循环,并检查VPN是否处于活动状态,如果未处于活动状态,则发送通知
看看这个

alias vpnd='sudo net down && while true; do sleep 120; sudo net up; [[ $(sudo netstat -nr | grep -q "0.0.0.0") ]] || notify-send "VPN is OFF"; done'

更新根据您的评论,如果您在循环过程中按下1秒内的任何键,它将立即重新启动VPN。否则,如果VPN在2分钟后仍然不活动,它将发送通知

alias vpnd='sudo net down && while true; do sleep 120; read -t 1 -n 1 && sudo net up || [[ $(sudo netstat -nr | grep -q "0.0.0.0") ]] || notify-send "VPN is OFF"; done'

UPDATE 2根据您的评论,别名没有终止的原因是因为while循环设置为无限期运行,因此您可以编辑别名以包含一个条件,一旦VPN重新激活,该条件将中断循环

alias vpnd='sudo net down && while true; do sleep 120; read -t 1 -n 1 && sudo net up && break || [[ $(ifconfig | grep -q "tun0") ]] || notify-send "VPN is OFF"; done'

相关问题