运行某个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。

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

终端实时显示运行日志:

tail -n +1 -f nohup.out

用到的指令:

nohup cmd &

使用&后台运行程序:

  • 结果会输出到终端
  • 使用Ctrl + C发送SIGINT信号,程序免疫
  • 关闭session发送SIGHUP信号,程序关闭

使用nohup运行程序:

  • 结果默认会输出到nohup.out(使用nohup命令让程序在关闭窗口(切换SSH连接)的时候程序还能继续在后台运行。
  • 使用Ctrl + C发送SIGINT信号,程序关闭
  • 关闭session发送SIGHUP信号,程序免疫

配合使用

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

  • 同时免疫SIGINTSIGHUP信号

tail

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

Linux tail 命令 | 菜鸟教程