[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 ...
随机推荐
- Nginx - rewrite 不区分大小写进行匹配
Nginx - rewrite 不区分大小写进行匹配 分类: Nginx2014-05-28 19:25 1046人阅读 评论(0) 收藏 举报 Use (?i) to match case-inse ...
- Django And Django-Rest-Framework 异常记录
1.TypeError: init() takes 1 positional argument but 2 were given
- QT 4.8.5 源代码目录调整
* 前言: 有一个代码比较乱的 QT 源码,我想让它分目录整理一下,特此记录一下. * 在原来的代码里面,里面很多文件都是在主文件里面,这样做的话不好维护以及整理 network 里面所有的文件都是和 ...
- loadOnStartup = 1
在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:标记容器是否在启动的时候就加载这个servlet.当值为0或者大于 ...
- java---堆、栈、常量池的存储数据
说到Java中堆.栈和常量池,首先还是看看他们各自存放的数据类型吧! 栈: Java的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method)也叫静态存储区. 堆区:(存放所 ...
- 嵌入式开发之davinci--- ccs 编译lib库
(1)ccs 简介 (2)ccs 输出格式coff elf (3)ccs 编译lib 算法库 (4)ccs 存在的问题 ---------------------------------------- ...
- Python 资料性网站。
伯乐在线:http://blog.jobbole.com/category/python/ http://blog.chinaunix.net/uid/22334392/cid-24327-list- ...
- Yii2.0实现微信公众号后台开发
接入微信 Yii2后台配置 1.在app/config/params.php中配置token参数 return [ //微信接入 'wechat' =>[ 'token' => 'your ...
- Ubuntu16.04 Tomcat9的安装
1. 从http://tomcat.apache.org/download-90.cgi 下载apache-tomcat-9.0.0.M11.tar.gz 2. 上传到Linux后移动到/opt/to ...
- RabbitMQ之Exchange-4
RabbitMQ消息模型的核心思想是生产者不会将消息直接发送给队列.生产者通常不知道消息将会被哪些消费者接收,按照刚开始里介绍的rabbitMQ中所画的,生产者不是直接将消息发送给Queue么认识会交 ...