由于实际工作的需要,需要重启某一服务,人工登录内网服务器较为麻烦。因此将重启服务命令写到脚本文件,并使用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()