一个linux脚本实现flask服务掉线自动重启

简介: 一个linux脚本实现flask服务掉线自动重启
背景

采用flask框架搭建的web服务,有时会因某些未知的原因,突然挂掉,导致客户端请求失效。推测原因有可能是这个服务程序本身的原因,又或者是有某些电脑监控程序发现监控到,某些暴露的端口不常用,因此将该进程杀掉。无论哪种原因,都需要一个能够监控到该进程退出后,立即重启的脚本。本篇即是解决这个问题。

源码展示

版本1

#!/bin/sh
pyFile=servicecase.py
py=../miniconda3/bin/python
#cmd="ps -ef | grep $pyFile | grep -v "grep" | awk '{print $2}'"
while true
do
    eval pid=`ps -ef | grep $pyFile | grep -v "grep" | awk '{print $2}'` #使用eval pid=$cmd无效
    if [ $pid ]; then
        #echo "process already exist!"
        : #相当于pass
    else
        $py $pyFile &
        eval pid=`ps -ef | grep $pyFile | grep -v "grep" | awk '{print $2}'`
        echo "process has been restarted!, new pid:$pid"
    fi
    sleep 5 
done

版本2

#!/bin/sh
pyFile=servicecase.py
py=../miniconda3/bin/python
cmd="ps -ef | grep $pyFile | grep -v "grep""
while true
do
    eval $cmd > /dev/null # 不显示ps该语句的执行结果,因为是个循环,如果该程序在运行将会不断生成显示
    if [ $? -eq 0 ]; then # $? 表示上一个命令,即eval ps等的返回结果是否有内容,没有返回1,有返回0
        #echo "process already exist!"
        : #相当于pass
    else
        $py $pyFile &
        eval $cmd
        echo "process has been restarted!, new pid:$pid"
    fi
    sleep 5 
done
说明

servicecase.py 是包含flask的服务端代码

cmd 是获得执行这条命令 …/miniconda3/bin/python servicecase.py后该服务进程的进程号

eval 是执行后面这条语句

这里涉及到一个技术点,字符串命令。其实笔者是很不愿意,ps这条命令出现很多次的,因此将该条命令制作成一个字符串。通过 eval $cmd1来执行ps这条命令,可以执行,但是获取不到进程号。因此,如果想去掉这么多冗余的命令,完全用字符串替代,也可以用第二个版本,这个版本根据命令执行后是否有返回来进行分支执行,但是代价看不到进程号。

参考文档

LINUX使用ps命令获取对应PID

Shell命令替换:将命令的输出结果赋值给变量

Linux 写一个监控程序,监控某个进程是否在运行,如果停止,则自动重启

脚本中判断Shell命令执行结果

相关文章
|
1天前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
23 3
|
1天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
20 3
|
2天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
17天前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
24 1
|
20天前
|
Ubuntu Linux 网络安全
Linux中服务管理问题
【10月更文挑战第4天】
15 2
|
8天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
84 5
|
8天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
35 4
|
5天前
|
运维 监控 网络协议
|
6天前
|
监控 Linux Shell
|
8天前
|
Unix Linux
Linux | Rsync 命令:16 个实际示例(下)
Linux | Rsync 命令:16 个实际示例(下)
22 3
Linux | Rsync 命令:16 个实际示例(下)