运行某个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 &
:
- 同时免疫
SIGINT
和SIGHUP
信号
tail
从文件第一行开始在终端显示文件,并动态刷新。