在服务器的使用过程中,我们常常需要后台执行程序防止断连/退出后程序中断。
如果我们想将程序挂在后台运行,留下清爽的终端界面,只需要在指令后加上&符号即可。
例如我们想在后台使用python执行test.py文件,我们可以在终端输入:
python test.py &
但这种方法有个缺点,运行时程序的标准输出会不断输出在终端上,且关闭终端时程序会停止运行。如果需要真正的、不受任何打扰的清净,且希望终端关闭时程序不停止运行,最简单的方法就是使用nohup指令:
nohup python test.py >> log.txt 2>&1 &
代码中
>>
表示追加,如替换成>
即为清空后添加;0代表stdin标准输入,1代表stdout标准输出,2代表stderr标准错误,在1
前加&
符号是为了区分这里的1
是标准输出而非文件名, 2>&1的含义是将标准错误重定向到标准输出,而标准输出早已由 >> log.txt定向到文本文档中保存。
这条指令在后台运行程序的基础上,更将标准错误输出和标准输出都重定向写入log.txt日志文件中。但需要注意这时程序将无法从标准输入接收数据,同时,需要使用exit正常退出当前账户,才能保证终端关闭后程序仍正常运行。
tmux是一个常用的终端复用器。在tmux窗口内运行的程序,不会因为窗口的退出而停止运行,故这也是实现程序后台运行的一种方式。
tmux # 开启新的tmux窗口
tmux ls # 获取现有所有窗口的编号
tmux attach -t 0 # 接入特定窗口