zoukankan      html  css  js  c++  java
  • [Shell] 简单的自动检查ssh代理是否正常的脚本

    As Follows:

     1 #!/bin/bash
     2 
     3 RESPONSE=`curl -s --socks5 127.0.0.1:7070 www.123cha.com`
     4 if [ 0 -eq $? ]
     5 then
     6         echo SUCCESS
     7 else
     8         echo FAILED
     9         echo 'RECONNECT...'
    10         ssh -qTfnN -D 7070 user@host
    11         if [ 0 -eq $? ]
    12         then
    13                 echo 'connect success!'
    14         else
    15                 echo 'connect failed!'
    16         fi
    17 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 30 --socks5 127.0.0.1:7070 www.google.com`
    if [ 0 -eq $? ]
    then
            echo "PROXY IS ONLINE"
            echo "PID: $PID"
    else
            echo "PROXY IS OFFLINE..."
            # 如果已经存在未结束的进程则结束此进程
            if [ $PID ]
            then
                    echo 'KILL exists Process'
                    kill -9 $PID
            fi
    
            echo 'RECONNECT...'
            $CMD
            if [ 0 -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

  • 相关阅读:
    window下安装两个mysql服务
    Linux 下 FastDFS v5.08 分布式文件系统的安装
    linux 下 php 安装 ZeroMQ 扩展
    win 下 nginx 与 php的配置
    Navicat Premium11连接Oracle出现ORA-28547:connection to server failed
    dedecms的自定义模块
    php 的多进程实践
    php多进程 防止出现僵尸进程
    php Pthread 多线程 (一) 基本介绍
    php 使用PHPExcel 导出数据为Excel
  • 原文地址:https://www.cnblogs.com/imoing/p/3764009.html
Copyright © 2011-2022 走看看