liunian / autoddvpn

Automatically exported from code.google.com/p/autoddvpn
0 stars 0 forks source link

求助:如何设置计划任务,检测是否在运行以及连接是否正常 #155

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
我知道这不是BUG,理论上不能提交issue。

但是我现在是autoddvpn的受益者,感谢管理员的辛勤工作。

我现在是用graceMode+Openvpn,一切正常。

但是我希望能有个功能,能自动检测openvpn是否在运行,以及�
��连接是否正常。如果不正常能自动恢复正常等等。

我目前用的是下述方案,但是测试是无效的。我killall 
openvpn后,五分钟后都没自动拨号。而且无法确认vpn断线后是�
��会继续拨。

方案如下:

守护脚本
OpenVPN再稳定都有意外挂掉的情况。这种时候我们就需要通过�
��统的cron来设置每隔2分钟,就运行一个脚本检查一次OpenVPN进
程当前是否在运行,不在的话就再运行一个OpenVPN。

脚本文件内容如下:

#!/bin/sh ISRUN=`ps|grep "openvpn"|wc -l` if [[ $ISRUN -lt 4 ]] then echo "Not 
running, start!" openvpn --config /jffs/openvpn/openvpn.conf --daemon else echo 
"Openvpn is already running." exit fi
假定保存到/jffs/openvpn/openvpnDaemon.sh位置,那么我们就在dd-wrt��
�web界面的“管理”->“管理”下启用Cron,并且在附加任务中�
��入:

*/2 * * * * /jffs/openvpn/openvpnDaemon.sh

Original issue reported on code.google.com by yangqic...@gmail.com on 8 Jul 2012 at 7:34

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
我也遇到同样问题
然后做了如下修改暂时可以解决问题,但不知道是否有隐患

首先cron的脚本中加入执行的用户,即改成这样
*/2 * * * * root /jffs/openvpn/openvpnDaemon.sh

然后,修改脚本文件,把-lt 4改成 -lt 5 即改成这样

#!/bin/sh
ISRUN=`ps|grep "openvpn"|wc -l`
if [[ $ISRUN -lt 5 ]]   
then                 
echo "Not running, start!"
openvpn --config /jffs/openvpn/openvpn.conf --daemon
else                                                
echo "Openvpn is already running."                  
exit                                                
fi

Original comment by shaw...@gmail.com on 15 Jul 2012 at 10:57

GoogleCodeExporter commented 9 years ago
感谢楼上。
我觉得光守护进程还不够,同时检测VPN连接是否正常为佳

Original comment by yangqic...@gmail.com on 16 Jul 2012 at 1:29

GoogleCodeExporter commented 9 years ago
我不熟悉linux命令,希望高手帮忙。

我的思路是,设置计划任务,每五分钟 ping 
199.59.148.82(twitter ip,不翻墙是ping不通的)
如果ping不通,就自动
killall openvpn
然后openvpn --config /jffs/openvpn/openvpn.conf --daemon

谁能帮忙写个cron?

Original comment by yangqic...@gmail.com on 30 Jul 2012 at 12:28

GoogleCodeExporter commented 9 years ago
我在Cron里是这么写的*/2 * * * * 
/jffs/openvpn/openvpnDaemon.sh>/tmp/1.txt
但是没有打log, 貌似没运行?

Original comment by bycha...@gmail.com on 21 Nov 2012 at 2:08

GoogleCodeExporter commented 9 years ago
已经解决并测试完成。

我的做法:
在/jffs/openvpn/内新建test.sh,内容如下:

#!/bin/sh
LOG='/tmp/openvpnDaemon.log'

ISRUN=`ping -q -c 20 199.59.148.82 | grep received | awk '{print $4}'`
if [[ $ISRUN -lt 3 ]]   
then                 
    echo "$(date "+%Y-%m-%d %H:%M:%S") restart" >> $LOG
    killall openvpn
    openvpn --config /jffs/openvpn/openvpn.conf --daemon
else                                                
    echo "$(date "+%Y-%m-%d %H:%M:%S") ok" >> $LOG
exit                                                                
fi

然后在管理-cron里填入:
*/10 * * * * root /jffs/openvpn/test.sh

保存重启即可。

实现效果:
每10分钟会自行检测那个twitter的ip是否能ping通,如果不行,��
�动重启openvpn进程。
同时,所有log输出至/tmp/openvpnDeamon.log内。

我的LOG如下:
2012-12-14 10:50:20 ok
2012-12-14 11:00:19 ok
2012-12-14 11:10:20 ok
2012-12-14 11:20:29 restart
2012-12-14 11:30:19 ok
2012-12-14 11:40:19 ok
2012-12-14 11:50:19 ok
2012-12-14 12:00:20 ok
2012-12-14 12:10:19 ok
2012-12-14 12:20:20 ok
2012-12-14 12:30:19 ok
2012-12-14 12:40:20 ok
其中,那个11点20的是我测试的时候记录的,测试通过!

Original comment by yangqic...@gmail.com on 14 Dec 2012 at 7:48

GoogleCodeExporter commented 9 years ago
做了下一总结
守护脚本
OpenVPN再稳定都有意外挂掉的情况。这种时候我们就运行一个�
��本检查一次OpenVPN是否正常,不的话就再运行一个OpenVPN。

我的做法:
在/jffs/openvpn/内新建test.sh,内容如下:

#!/bin/sh
LOG='/tmp/openvpnDaemon.log'

ISRUN=`ping -q -c 20 199.59.148.82 | grep received | awk '{print $4}'`
if [[ $ISRUN -lt 3 ]]   
then                 
    echo "$(date "+%Y-%m-%d %H:%M:%S") restart" >> $LOG
    killall openvpn
    openvpn --config /jffs/openvpn/openvpn.conf --daemon
else                                                
    echo "$(date "+%Y-%m-%d %H:%M:%S") ok" >> $LOG
exit                                                                
fi

然后在管理-cron里填入:
*/10 * * * * root /jffs/openvpn/test.sh

保存重启即可。

实现效果:
每10分钟会自行检测那个twitter的ip是否能ping通,如果不行,��
�动重启openvpn进程。
同时,所有log输出至/tmp/openvpnDeamon.log内。

但现实情况中,gfw干扰十分频繁,有时openvpn会出现意外断线 
验证错误等情况自动退出进程
但ping 
twitter的ip过于频繁,等于DDos攻击,与我们不作恶只为合理学�
��知识的初衷不符,于是自我检测openvpn进程是否运行就显得��
�较重要了
在/jffs/openvpn目录下建立checkps.sh脚本

#!/bin/sh
LOG='/tmp/openvpncheck.log'
ISRUN=`ps|grep "openvpn"|wc -l` 
if [[ $ISRUN -lt 4 ]] 
then 
       echo "$(date "+%Y-%m-%d %H:%M:%S") Not running,restart" >> $LOG
       openvpn --config /jffs/openvpn/openvpn.conf --daemon 
else 
       echo "$(date "+%Y-%m-%d %H:%M:%S") Openvpn is running ok" >> $LOG
exit 
fi

然后在管理-cron里填入:
*/3 * * * * root /jffs/openvpn/checkps.sh

为了不与test.sh冲突,只能选取2,3,5,7,等质数,3最小,就是你�
��
于是就大功告成。

注意,如果你的openvpn.conf不是保存在/jffs/openvpn位置,那么相�
��的,要在上面的脚本文件内容中,把 -lt 
后面的数字进行修改,这取决于你最后保存的位置的字符串��
�有几个“openvpn”。如果有n个,那么那个数字就改称n+2。
config /jffs/openvpn/openvpn.conf 
              1         2            所以是-lt 4

Original comment by hugha...@gmail.com on 1 Feb 2013 at 1:06

GoogleCodeExporter commented 9 years ago
测试log如下
openvpncheck.log
2013-02-01 20:45:00 Openvpn is running ok
2013-02-01 20:48:00 Openvpn is running ok
2013-02-01 20:51:00 Openvpn is running ok
2013-02-01 20:54:00 Openvpn is running ok
2013-02-01 20:57:00 Openvpn is running ok
2013-02-01 21:00:00 Openvpn is running ok
2013-02-01 21:03:00 Openvpn is running ok
2013-02-01 21:06:00 Openvpn is running ok

openvpnDaemon.log如下
2013-02-01 20:50:19 ok
2013-02-01 21:00:19 ok

Original comment by hugha...@gmail.com on 1 Feb 2013 at 1:09