红联Linux门户
Linux帮助

Linux北大网关断网重连

发布时间:2017-06-20 09:51:48来源:linux网站作者:超级杰哥
概述
把台式机搬到实验室当服务器用了,买了个极路由插在公网IP上,做一个端口转发,可以随时随地远程ssh这台电脑了。但是问题来了,PKU的网关不稳定,有的时候会断,断了的话这台电脑就连不上网了。
于是我利用北大提供的Linux shell联网客户端connect(https://its.pku.edu.cn/download_ipgwclient.jsp), 写了一个脚本,每隔一定时间检测一下网络是否通畅,如果网断了,就自动重新连接。
 
下载connect客户端
去https://its.pku.edu.cn/download_ipgwclient.jsp下载北大网关linux命令行客户端,chmod 755 connect,然后mv到 /usr/local/bin/目录下:
$ wget https://its.pku.edu.cn/pku_gateway_apps/download/linux/connect
$ sudo chmod 755 connect
$ sudo mv ./connect /usr/local/bin/
 
编写脚本
$ vim pkunet.py
###############################
#!/usr/bin/python
#coding=utf8
'''
本脚本用于定时检查北大校园网关是否联通,如果不联通,则重新连接。
前提是在/usr/local/bin/目录下存在connect客户端。
connect是北大计算中心提供的linux shell客户端,下载地址如下:
https://its.pku.edu.cn/download_ipgwclient.jsp
@作者: 刘伟杰
@日期: 2017-03-14
'''
import os  
import time
import urllib2 as ulb
import logging
# settings
CHECK_SITE = 'https://www.baidu.com/'
TIME_OUT = 3  # 连接超时时间
USER_NAME = 'studentid'
PASSWORD = 'password'
TIME_INTERVAL = 600  # 每600秒检查一次网络
LOG_FILE = '/home/liuweijie/.pkunet.log'
# configuration
this_dir = os.path.dirname(os.path.abspath(__file__))
connect_client = '/usr/local/bin/connect'
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename=LOG_FILE,
filemode='a'
)
def is_connect():
'''
检测网络是否通畅
'''
try:
ulb.urlopen(CHECK_SITE, timeout=TIME_OUT)
return True
except:
return False
def connect():
'''
连接网关
'''
try:
os.system('%s -u %s -p %s'%(connect_client, USER_NAME, PASSWORD))
return True
except:
return False
def run():
now = time.strftime('%Y-%m-%d %X', time.localtime())
logging.info('%s: PKUNet start!'%(now))
connect()
while True:
time_remaining = TIME_INTERVAL - time.time()%TIME_INTERVAL
time.sleep(time_remaining)
if not is_connect(): 
now = time.strftime('%Y-%m-%d %X', time.localtime())
logging.warning("%s: Network wrong!"%(now))
is_success = connect()
if is_success:
logging.info("Network reconnect successfully!")
else:
logging.warning("Network reconnect Falied!")
if __name__ == '__main__':
run()
 
保存脚本, 改变脚本权限, 把脚本移动到/usr/local/bin/目录下
$ sudo chmod 777 pkunet.py
$ sudo mv pkunet.py /usr/local/bin/
 
设置开机执行该脚本
在/etc/init.d/写一个脚本
$ cd /etc/init.d/
$ sudo vim pkunet
 
添加如下内容:
#! /bin/sh
/usr/local/bin/pkunet.py &
 
保存退出,然后改变该脚本权限
$ chmod 755 pkunet
 
添加到开机启动服务中
$ sudo update-rc.d pkunet defaults 99
 
重启,这样就好了,每次的log会保存到/home/liuweijie/.pkunet.log中
 
如果要关闭这个服务
$ sudo update-rc.d -f pkunet.py remove
 
本文永久更新地址:http://www.linuxdiyf.com/linux/31603.html