[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 ...
随机推荐
- C++之extern关键字
extern关键字 extern extern关键字的作用就是告诉编译器,它修饰的变量或者函数在别处定义. extern "C" 代码一: cppExample.h #ifndef ...
- shell学习笔记之命令(四)
命令的类型:1>.外部命令:在命令提示符中执行的普通命令.2>.内置命令:内置命令是在shell内部实现的. 1.break命令 #!/bin/sh rm -rf fred* echo & ...
- bootstrap.memory_lock: true导致Elasticsearch启动失败问题
elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true 重新启动elasticsearch,报错信息如下: [baoshan@test-43.dev. ...
- django 将model转换为字典
from django.forms.models import model_to_dict from projects.models import ProjectInformation site = ...
- Makefile 11——支持头文件目录指定
现在,是时候在对应目录放入对应文件了: /× foo.h */ #ifndef __FOO_H #define __FOO_H void foo(void) #endif/*__FOO_H*/ /* ...
- windows下wim配置成IDE
1.配置文件_wimrc set fileencodings=utf-,ucs-bom,cp936,big5 set fileencoding=utf- source $VIMRUNTIME/vimr ...
- jfinal中Interceptor的使用
一.拦截器是用于对action请求的拦截处理,发生在进入action方法体之前的拦截操作,这样方便了对请求实例做一些文章. 二.自定义.系统已有拦截器都需要实现Interceptor接口,这样才能 ...
- CSS学习笔记(11)--Flex 布局教程:语法篇
原文--阮一峰博客 作者: 阮一峰 日期: 2015年7月10日 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 ...
- java ssm框架入门(二)添加语言滤器
使用过滤器是在web.xml中使用filter,以下是码过滤器,过滤所有资源的使用 web.xml <filter> <filter-name>setCharactor< ...
- 搭建springmvc框架的另一种思路
在一个完整的项目里搭建springmvc框架的时候, 通常情况下,初学者在配置的时候,总是会把"中央控制器的名字"-servlet.xml文件放到/Webroot/WEB-INF下 ...