Linux后台执行命令行程序避免远程连接中断导致训练意外终止

目标

训练模型的时候XShell老是连接意外中断,导致训练过程终止,不能实现自动化无人值守的训练,因此希望连接中断甚至本地客户端关机也能维持训练进程。

解决

Linux下通过nohup命令实现后台执行程序,任何向终端输出文本信息的语句都会被重定向到一个log文件中,如下:

conda activate pytorch-gpu
cd ~/xc/Gits/StereoSiamNet/
nohup python train/train_ssn.py > train.log 2>&1 &

参考自overflow问答:https://askubuntu.com/questions/349262/run-a-nohup-command-over-ssh-then-disconnect
或者参考Linux菜鸟教程:https://www.runoob.com/linux/linux-comm-nohup.html
其中nohup命令是核心,它能实现退出终端依然保持程序在后台运行,和Windows下的start /b指令是类似的,只不过后者在关闭终端后就退出了,这是由于在终端中执行的命令是附在终端进程上的。
后面的2>&1 &命令是为了将运行出错的信息(2表示错误输出流stderr)重定向到标准输出stdout中,这样用于我们就可以在自己指定的文件中看到错误输出了。
这里可以学习到以下几点:

  1. xxx > out_file 只能记录标准输出流stdout的信息;
  2. &1 表示标准输出stdout, &2表示错误输出流stderr;
  3. 文件捕获stderr的一种方法就是输出流重定向;

最后的&符号似乎和nohup的功能重叠。

posted @ 2021-07-26 16:02  xchk138  阅读(678)  评论(0)    收藏  举报