判断程序是否运行,断开重新运行,并记录的shell脚本

判断程序是否运行,断开重新运行,并记录的shell脚本,第1张

判断程序是否运行,断开重新运行,并记录的shell脚本

运行某个python程序,老是自动断开。导致浪费训练时间。

解决办法:写一个脚本,每隔一段时间判断python程序的进程是否在运行,不运行的时候重新运行;运行时将判断 *** 作写入日志中。

status.sh脚本

#!/bin/bash
  
while true   # 无限循环
flag=`ps -aux |grep /home/data1/HRNet/tools/train_2stage_1.py |grep -v "grep" |wc -l`
do
        if [ $flag -eq 0 ]   # 判断进程数如果等于0,则启动python程序
        then
                echo `date` - "/home/data1/HRNet/tools/train_2stage_1.py restart" >> running.log   # 将重启时间写入自定义的日>
志文件
                nohup python /home/data1/HRNet/tools/train_2stage_1.py &   # 启动python程序
        else
                echo `date` - "/home/data1/HRNet/tools/train_2stage_1.py is running..." >> running.log
        fi
        sleep 10m  # 延迟10分钟后进入下次循环
done

终端运行指令:

nohup sh status.sh &

会生成两个文件nohup.out和running.log

注意:sh线程和脚本中的python运行程序的进程是两个不同的进程,使用ps -ef可以查询到两个进程有不同的PID。参考:Linux中的程序和进程,PID和PPID_洋羽翔_hisen-CSDN博客_ppid

关闭的时候需要把上述两个进程都kill掉。查找对应PID,kill PID。

终端实时显示运行日志:

tail -n +1 -f nohup.out

用到的指令:

nohup cmd &

使用&后台运行程序:

  • 结果会输出到终端

  • 使用Ctrl + C发送SIGINT信号,程序免疫

  • 关闭session发送SIGHUP信号,程序关闭

使用nohup运行程序:

  • 结果默认会输出到nohup.out(使用nohup命令让程序在关闭窗口(切换SSH连接)的时候程序还能继续在后台运行。参考:解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】_洛Darki的博客-CSDN博客_ssh关闭后程序不会运行)

  • 使用Ctrl + C发送SIGINT信号,程序关闭

  • 关闭session发送SIGHUP信号,程序免疫

配合使用

平日线上经常使用nohup和&配合来启动程序nohup ./test &:

  • 同时免疫SIGINT和SIGHUP信号

一分钟了解nohup和&的功效_偷懒的加菲-CSDN博客_nohup

tail

从文件第一行开始在终端显示文件,并动态刷新。

Linux tail 命令 | 菜鸟教程

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存