由于实际工作的需要,需要重启某一服务,人工登录内网服务器较为麻烦。因此将重启服务命令写到脚本文件,并使用Python的wsgiweb服务器提供外部访问,使用subprocess执行shell文件。本次示例代码以Linux服务器默认的python2.7为例。shell文件位于脚本同目录下的test.sh文件。注意要给test.sh给与执行权限。如果需要传参,参数直接跟在sh文件后面(与正常sh文件执行传参方法一致)
为了保证服务安全,在执行一次重启命令后服务能完成重启,特此设置重启时间间隔,本例以10秒为间隔,如果在10秒内重启,则提示用户重启失败。
# -*- coding: UTF-8 -*- import time import json import subprocess pretime = time.time() def application(environ, start_response): global pretime nowtime = time.time() """ environ 是包含所有HTTP请求信息的dict对象 start_response 是发送HTTP响应的函数 start_response用于发送HTTP响应Header, 只能发送一次, 接收两个参数, 第一个参数是响应码, 第二个参数是响应Header :param environ: :param start_response: :return: """ # HTTP请求信息也放在environ里, 只不过有HTTP_前缀 如HTTP_USER_AGENT # print(environ) print("JAVA_HOME={}".format(environ.get("JAVA_HOME"))) print("USER_AGENT={}".format(environ.get("HTTP_USER_AGENT"))) data = "" if nowtime-pretime < 10: data = {"result": "error","msg": u"do not click again within 10 seconds,"+"%s seconds left" % (int(10-(nowtime-pretime)))} else: try: print(subprocess.call('./test.sh', shell=True)) data = {"result": "success","msg": u"resatrt success"} pretime = time.time() except: data = {"result": "error","msg": u"please check service log"} response = json.dumps(data) # 发送HTTP Response Header start_response('200 OK', [('Conten-Type', 'application/json')]) return [bytes(response, 'utf8')] from wsgiref.simple_server import make_server # 创建服务器 httpd = make_server("localhost", 8080, application) print("Serving HTTP on port 8080 ...") # 开始监听HTTP请求 httpd.serve_forever()