在 OSX 上用 automator 实现 VPN 断线自动重连
由于某些原因,平时需要使用到 VPN,但是和这个服务器之间的链路呢总是有些不稳定,经常会断掉,然而 OSX 网络设置面板没有找到自动重播的选项,而且有时这个连接只是假死,就是还显示状态是连接上的,但是就是没有流量,得重播。
可是手工去重播的话很麻烦,之前有试过在路由器上写过 python 脚本来实现链路连通状况检测自动重播的脚本,不过后来呢,那个路由器退役了,现在在 OSX 平台下想寻找到类似的解决办法,Google 了解到 OSX 下有 automator 这样的神器。倒腾了一会解决了问题,在这里记录下来。
首先打开 automator,他是这个样子的:
然后我们要制作一个应用程序,就像这样:
在 资料库
中选择 实用工具
分栏,找到 运行 AppleScript
这个东西,拖到右边,然后我们的代码编辑区就出现了,之后的所有代码都写在这里:
然后想想我需要实现什么,首先需要实现控制 VPN 连接的动作,Google 到相关的资料,代码如下
tell application "System Events" tell network preferences disconnect service "L2BF" connect service "L2BF" end tell end tell
这段意思呢就是告诉 System Events 模块
(我叫他模块,不知道对不对)里面的 network preferences 模块
:我要断开一个叫L2BF的连接,然后重连一下,这里测试结果没有问题。
那么下一个部分就是网络的状态监测部分,这里呢我想到的最简单的办法就是用ping命令检测,然后我就找到一个在 AppleScript 里运行 python 程序的办法,代码如下:
do shell script "ping -c 1 -W 3000 baidu.com"
这样就完成了一条 python 语句执行,对 baidu.com 发一个 ping 包,3000 秒超时。然后就是关于逻辑判断的部分了,找到了这些我需要的部分:
Try catch 语句
try {"语句."} on error {"语句."} end try
循环语句
repeat {"语句."} end repeat
当然,这里也可以有循环附加条件,比如这样:
repeat 2 times repeat with counter from 1 to 3 repeat while counter ≠ 10 repeat until counter = 10 repeat with 单个元素 in 集合
判断语句
也就类似这样
if flag = 0 then {"语句."} else if flag = -1 then {"语句."} end if
变量什么的
set flag to 0
然后代码就这样写出来了:
on run {input, parameters} set flag to 0 repeat try do shell script "ping -c 1 -W 3000 baidu.com" delay 30 on error beep tell application "System Events" tell network preferences disconnect service "L2BF" connect service "L2BF" end tell end tell delay 5 end try end repeat return input end run
每隔30秒检测一下连通性,出现问题就重拨一下,看起来很不错,点一下这个按钮测试一下:
结果很不错,至少我把连接断掉他能自动给我连上。到这里就功德圆满了吗?不不不,在查找资料的过程中我看到了这个逼格很高的东西,有人在代码里写了一句这个:
say "Good~"
我也试了一下,当时就懵逼了,这还能语音说话。然后就打算提高一下这个程序的逼格,加入语音的部分,还去系统语音里面选了一个不错的女声 Vicki:
加了语音和提示音后的程序代码:
on run {input, parameters} say "Demon started." set flag to 0 repeat try do shell script "ping -c 1 -W 3000 baidu.com" if flag = 0 then say "Connected." else if flag = -1 then say "Reconnected!" end if set flag to 1 delay 10 on error beep set flag to -1 say "Connection error! Try reconnect..." tell application "System Events" tell network preferences disconnect service "L2BF" connect service "L2BF" end tell end tell delay 5 end try end repeat return input end run
运行之后还有语音提示,666.
标准结局
Good!然后在 Spotlight 里搜索程序便可以直接打开:
运行之后在顶栏会有这样一个小齿轮,点击可以选择退出:
最后附上一些资料站:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论