一个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关机重启
linux关机重启 登录注销 shutdown -h now 立刻关机 shutdown -h 1 一分钟后重启 shutdown -r now 重启计算机 halt 关机 reboot 重启计算机 sync 内存数据同步到磁盘 su - 用户名 切换管理
|
4天前
|
NoSQL Java Linux
springboot+redis+虚拟机 springboot连接linux虚拟机中的redis服务
该博客文章介绍了如何在Spring Boot项目中通过配置和代码实现连接运行在Linux虚拟机上的Redis服务,并提供了详细的步骤和测试结果截图。
springboot+redis+虚拟机 springboot连接linux虚拟机中的redis服务
|
6天前
|
编解码 Linux 数据安全/隐私保护
Linux平台x86_64|aarch64架构如何实现轻量级RTSP服务
为满足在Linux平台(x86_64与aarch64架构)上实现轻量级RTSP服务的需求,我们开发了一套解决方案。该方案通过调用`start_rtsp_server()`函数启动RTSP服务,并设置端口号及认证信息。支持AAC音频和H.264视频编码,可推送纯音频、纯视频或音视频流。此外,还支持X11屏幕采集、部分V4L2摄像头采集、帧率/GOP/码率调整、摄像头设备选择与预览等功能。对于音频采集,支持alsa-lib和libpulse接口。整体设计旨在提供150-400ms的低延迟体验,适用于多种应用场景。
|
6天前
|
Linux
linux关机重启
linux关机重启 登录注销 shutdown -h now 立刻关机 shutdown -h 1 一分钟后重启 shutdown -r now 重启计算机 halt 关机 reboot 重启计算机 sync 内存数据同步到磁盘 su - 用户名 切换管理 logout注销用户 只能在无界注销
|
4天前
|
Linux
linux关机重启
linux关机重启 登录注销 shutdown -h now 立刻关机 shutdown -h 1 一分钟后重启 shutdown -r now 重启计算机 halt 关机 reboot 重启计算机 sync 内存数据同步到磁盘 su - 用户名 切换管理 logout注销用户 只能在无界注销
|
5天前
|
编解码 Linux 开发工具
Linux平台x86_64(麒麟|统信UOS)|aarch64(飞腾)如何实现摄像头|屏幕和麦克风|扬声器采集推送RTMP服务或轻量级RTSP服务
国产化操作系统的发展,减少了外部依赖,更符合国家安全标准,并可提升自主研发能力,促进产业链发展,满足定制开发能力,减少了外部技术封锁的风险,提高了国际竞争力,推动了产业升级。目前大牛直播SDK针对Linux平台x86_64架构和aarch64架构的RTMP推送模块和轻量级RTSP服务模块
|
6天前
|
网络协议 Linux
Linux——Centos8.2如何重启网卡服务
Linux——Centos8.2如何重启网卡服务
17 0
|
9月前
|
Linux
Linux关机和重启命令
Linux关机和重启命令
|
3月前
|
Linux 数据安全/隐私保护
Linux关机与重启命令
Linux关机与重启命令
55 0
|
8月前
|
Linux Shell Windows
linux(九)关机重启命令
接下来,我们来看一下linux 关机与重启相关的命令。 Linux 不同于我们的windows系统,时间长了不关机卡的要死,而且linux一般作为服务器使用,一般是不会关机的。耽误事啊。 这部分的内容比较枯燥,基本上就是照本宣科,但是,还是很有必要了解一下的,说实话,下面的很多命令我之前也不知道。 一:关机命令 关机命令这里大概有4个,我下边分别来看。 1:halt:立刻关机 若系统的 runlevel 为 0 或 6 ,则Linux halt命令关闭系统,否则以 shutdown 指令(加上 -h 参数)来取代。 (1):参数: -n : 在关机前不做将记忆体资料写回硬盘的动作
76 0