[Shell] 简单的自动检查ssh代理是否正常的脚本
As Follows:
#!/bin/bash RESPONSE=`curl -s --socks5 127.0.0.1: www.123cha.com`
if [ -eq $? ]
then
echo SUCCESS
else
echo FAILED
echo 'RECONNECT...'
ssh -qTfnN -D user@host
if [ -eq $? ]
then
echo 'connect success!'
else
echo 'connect failed!'
fi
fi
Add to Crontab:
crontab -e
Add New Line:
* * * * * /bin/bash /PATH/TO/SHELL
## 2014-06-08 Update
实际使用过程中存在一些问题,表现如下:
当网络异常中断又连接之后,会导致出现多个代理进程,最终导致代理失败
想到的解决方法:
每次成功建立连接之后记录连接的进程id
在检测到代理失效之后需要kill掉原来的进程再新建连接
完善后的脚本如下:
#!/bin/bash echo `date`
CMD="ssh -qTfnN -D 7070 user@host" # 如果存在运行中的进程则获取其PID
PID=`ps aux|grep -F "$CMD" | grep -v -F 'grep' | awk '{printf $2}'` # 增加超时限制 30s
# 根据所用代理确定使用哪个域名进行测试
RESPONSE=`curl -s -m --socks5 127.0.0.1: www.google.com`
if [ -eq $? ]
then
echo "PROXY IS ONLINE"
echo "PID: $PID"
else
echo "PROXY IS OFFLINE..."
# 如果已经存在未结束的进程则结束此进程
if [ $PID ]
then
echo 'KILL exists Process'
kill - $PID
fi echo 'RECONNECT...'
$CMD
if [ -eq $? ]
then
# 获取进程id, 此处不能使用`$$` 或者 `$!`来获取,因为命令中的-f参数会产生
# 额外的进程
PID=`ps aux|grep -F "$CMD" | grep -v -F 'grep' | awk '{printf $2}'`
echo 'CONNECT SUCCESS!'
echo "PID: $PID"
else
echo 'CONNECT FAILED!'
fi
fi
## 2014-06-11 UPDATE
实际使用中还是会出现多个进程同时运行的情况。原因应该和切换网络有关
参考地址: http://stackoverflow.com/questions/1821968/pid-of-last-started-process-in-bash-script
[Shell] 简单的自动检查ssh代理是否正常的脚本的更多相关文章
- Linux下实现自动设置SSH代理
SSH的巨大价值体现在能够配置为代理服务器上.不像在Windows下每次还需要手动登录设置,Linux有很好的工具链能够实现自动设置SSH代理,就是expect和ssh的联合使用,再加上proxych ...
- 自动添加 ssh key 到远程主机的脚本,应用sshpass和ssh-copy-id
USERNAME=$ PASSWORD=$ HOST=$ if [ "$3" = "" ]; then echo "Missing parameter ...
- vscode 使用ESLint 自动检查,保存时自动格式化
1:全局安装eslint `npm install -g eslint`2: 打开vscode 点击 “文件”----->“首选项”---->“设置”,在右侧“用户设置/settings. ...
- Windows批处理:自动检查服务器连通性
该技术与上一篇<自动检查网络连通性>的实现原理相同,我将脚本稍微改动了下,用于检查公司服务器的连通性,简单快捷.在这里附上修改方法. @echo off color 1F title 服务 ...
- [转] 关于linux下通过shell命令(自动)修改用户密码
关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...
- ssh代理上网
背景: 公司开发机没有外网,但可以通过ssh连接到另一台可以上公网的机器,所以想通过ssh代理的方式上网,简单又方便,而且需要的时候上,不需要的时候也可以不上 配置: 超级简单 在开发机上建立ssh隧 ...
- SSH代理
参考: http://www.dkys.org/archives/1111.html SSH的-L与-D代理 SSH有三种代理参数-L,-D,-R.-R代理不是本次重点,有兴趣的读者可以自行查阅man ...
- IT这一行,如可高速下载国外资源之迅雷设置免费SSH代理下载国外资源
本文转自SUN'S BLOG 原文地址:IT这一行,如可高速下载国外资源之迅雷 我们这些做IT这一行的人,经常,下载一些国外的一些资源,可是让人蛋碎的是,往往这些资源下载都慢的像蜗牛,真的让人无法忍受 ...
- 关于thinkphp 中的字段自动检查机制
在thinkphp中有很好用的自动检查机制$_validate() 但是必须与create接收配合使用 可以很方便的帮助我们去判断 namespace Home\Model;use Think\Mod ...
随机推荐
- Java连接postgresql数据库
1.下载驱动jar下载地址:https://jdbc.postgresql.org/download.html 2.导入jar包新建lib文件夹,将下载的jar驱动包拖到文件夹中.将jar驱动包添加到 ...
- ng-class中的if else判断
ng-class中的if else判断 来自于stackoverflow的一个问题,自己刚好用到,搬过来做个标记.原问题链接 在使用ng-class时,有些时候会碰到根据是否满足条件来设置元素的样式, ...
- boost 库的安装
一.windows下 环境:win7 64位 方法1:使用.exe类型的boost进行安装,也就是编译过得,这种方法最简单.下载后直接执行.exe就行了. http://sourceforge.net ...
- Linux IO实时监控iostat命令详解(转载)
简介 iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息.用户可以通过指定统计的次数和时间 ...
- 演练:创建和注册自定义 HTTP 模块
本演练演示自定义 HTTP 模块的基本功能. 对于每个请求,都需要调用 HTTP 模块以响应 BeginRequest 和 EndRequest 事件. 因此,该模块在处理请求之前和之后运行. 如果 ...
- SQL select查询原理--查询语句执行原则<转>
1.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果. 1)简单的单表查询 SELECT 字段 FROM ...
- PHP——转义字符
链接:百度-转义字符 http://baike.baidu.com/link?url=obfdOqATx4TO0Ev_kFnPz37wwW3SDhFPsvNobVTidhFuCn2zK5VmCuW1L ...
- css样式整理
字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 {font-style: obl ...
- 使用AngularJS实现的前后端分离的数据交互过程
一. AngularJS简介 AngularJS是什么 AngularJS是一个开源Web应用程序框架.最初是由MISKO Hevery和Adam Abrons于2009年开发,现在是由谷歌维护. A ...
- 第二百八十节,MySQL数据库-外键链表之一对多,多对多
MySQL数据库-外键链表之一对多,多对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索 ...