【计划昵称全网统一,代码随想随记,知乎无法立即修改,,】
微信公众号:leetcode_algos_life,代码随想随记
小红书:412408155
CSDN:https://blog.csdn.net/woai8339?type=blog ,代码随想随记
GitHub: https://github.com/riverind
抖音【暂未开始,计划开始】:tian72530,代码随想随记
知乎【暂未开始,计划开始】:happy001
问题
(1)自动获取进程id
(2)对Flask服务做进程监控,防止服务挂了
解决方案
(1)获取进程id
def get_pid_from_port(port): #其中"为转义" pid = os.popen("netstat -nlp | grep :%s | awk '{print $7}' | awk -F" / " '{ print $1 }'" % (port)).read().split('/')[0] return pid
这里的
如果该端口进程存在,则返回字符串类型的进程id
如果该端口进程不存在,则返回字符串类型为空,字符串长度为0【即返回""】
(2)对Flask进程做监控
这里分两个部分:
一是端口进程监控,看进程是否存在。
二是自动执行脚本。
其中第一个事情,监控服务端口达到监控服务的目的,通过判断pid即可。
第二,自动执行脚本。
如果一个Flask服务,通过命令行形式指定端口启动服务,即:
import argparse parser = argparse.ArgumentParser(description='命令行参数') parser.add_argument('--port', '-p', type=str, help='参数port,必须参数', required=True) args = vars(parser.parse_args()) host = '0.0.0.0' app.run(host=host, port=args['port'], debug=False, threaded=True)
将该脚本命名为主程序,
则自动运行程序代码为:
def run_python_script(port): os.system("nohup python main.py --port " + str(port) + "&") print("正在启动:%s"%(port))
此时,可以通过pid来进行服务自动监控:
port = 9008 pid = get_pid_from_port(port) if pid == -1: run_python_script(single_port) return "端口号为{}, pid 为{}的服务开始启动".format(port, pid) else: return "端口号为{}, pid 为{}的服务已经在运行中".format(port, pid)