运行某个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 命令 | 菜鸟教程
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)