一个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命令执行结果

相关文章
|
24天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1
|
27天前
|
Linux Shell Python
Linux执行Python脚本
Linux执行Python脚本
27 1
|
2天前
|
Linux Shell Android开发
自动化脚本之GPIO/LED相关适用于Android/Linux
自动化脚本之GPIO/LED相关适用于Android/Linux
13 0
|
8天前
|
存储 关系型数据库 MySQL
Linux服务详解
Linux服务详解
23 0
|
9天前
|
网络协议 Ubuntu Linux
Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载
Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载
|
17天前
|
监控 Java Linux
linux下监控java进程 实现自动重启服务
linux下监控java进程 实现自动重启服务
|
20天前
|
关系型数据库 MySQL Linux
linux特定服务日志
Linux系统的服务日志在`/var/log`目录下,如系统日志(`/var/log/syslog`或`/var/log/messages`)、认证日志(`/var/log/auth.log`)、SSH日志(`/var/log/auth.log`或`/var/log/secure`)。Web服务器(Apache和Nginx)的访问和错误日志、MySQL错误日志、Postfix及Dovecot邮件服务器日志也在此处。日志位置可能因发行版和服务配置而异,不确定时可查服务配置或用`grep`搜索。使用`logrotate`可管理日志文件大小。
20 6
|
23天前
|
Ubuntu Unix Linux
【Linux/Ubuntu】Linux/Ubuntu运行python脚本
【Linux/Ubuntu】Linux/Ubuntu运行python脚本
|
23天前
|
Shell Linux
Linux的shell入门教程shell脚本入门教程
Linux的shell入门教程shell脚本入门教程
15 0
|
24天前
|
Linux Shell
Linux脚本获取输入参数判断文件还是文件路径
Linux脚本获取输入参数判断文件还是文件路径
12 4