Linux后台运行及不挂断相关命令
Linux后台运行及不挂断相关命令
背景
我们经常会遇到这种需求:ssh到Linux服务器上,跑一个耗时比较久的任务,比如编译任务等,有时候由于网络不好,网络故障,或者不小心将跑任务的终端关闭了(也有可能是跑终端的机器异常了),导致好不容易跑了很久的任务中断退出,前面跑的白费了,又不得不重新跑!此时的你是不是很郁闷。。。
该咋解决呢?就是今天介绍的几个主角:nohup
、screen
、&
。
command &
大家可能对这个最为熟悉,&
表示将前面的 command 任务放入后台,单独起一个进程来运行,使用Ctrl + C
无法中止该任务,此时你可以继续在该终端上做其他事情,但如果关闭该终端,该任务进程会跟着退出。
nohup command
nohup
是 no hung up的缩写,顾名思义就是不挂断,忽略挂起信号运行后面的 command 。所以它并没有后台运行的功能,只是会将任务永久执行,无论是否关闭终端,断开ssh等。
nohup 命令,在默认情况下(非重定向时),标准输出会输出到当前目录下 nohup.out
文件中,如果当前目录的 nohup.out
文件不可写,输出重定向到 $HOME/nohup.out
文件中。
nohup
一般常用的用法是和&
结合使用(nohup + 后台启动 ):
nohup command > output.log 2>&1 &
说明:
2>&1
:表示将命令的标准错误输出重定向到标准输出中一起输出。- 如果不想输出日志,可以重定向到
/dev/null
。 - 如果不想不停止服务,清空默认输出
nohup.out
,有以下2种方法:# 第1种: cat /dev/null > nohup.out # 第2种: cp /dev/null nohup.out
注意:服务正在运行时千万别直接删除日志文件nohup.out
screen
screen - screen manager with VT100/ANSI terminal emulation
screen
一般是需要单独安装的,可以理解为是一个会话窗口管理工具。在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。
以编译任务为例,一个简单的使用流程:
1. 执行screen命令
2. 开始编译
3. 关闭SSH
......去喝一杯水,或者忙其他事情......
4. 连接SSH
5. screen -r
6. 查看编译进度
更详细的使用,可参考 help 或者 man 文档。
参考
https://blog.csdn.net/weixin_49114503/article/details/134266408