前言
nohup
是linux系统中自带的一个命令行工具,英文全称 no hang up(不挂起)。功能是在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup
需要配合 &
一起使用。
正文
输入输出重定向
定义:为了更高效的处理数据,需要把多个Linux命令适当的组合在一起,使其协同工作,要做到这一点,就必须搞明白命令的输入重定向与输出重定向的原理。
输入重定向:是指把文件导入到命令中;
输出重定向:指把原本要输出到屏幕的数据信息写入到指定文件中。又分为
- 标准输出重定向
- 错误输出重定向。
下表为输出重定向中用到的符号及其作用
命令 > 文件 // 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 // 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2 > 文件 // 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 2 >> 文件 // 将错误输出重定向到一个文件中(追加到原有内容的后面)
&> 或 2>&1 // 将标准输出与错误输出共同写入到文件中
操作系统中三个常用的流:
- 0:标准输入流 stdin
- 1:标准输出流 stdout
- 2:标准错误流 stderr
一般当我们用 > test.log
,实际是 1 > test.log
的省略用法;
< console.txt
,实际是 0 < console.txt
的省略用法。
什么是标准输出流?
我们使用shell 命令 echo hello word
时,会在控制台打印出 hello word
,这就属于标准输出流
什么是标准错误流?
我们在执行删除某个文件时,系统提示: 无法删除,没有那个文件,时,这时的提示就属于标准错误流。
nohup 语法
nohup Command [ Arg … ] [ & ]
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
&:让命令在后台执行,终端退出后命令仍旧执行。
nohup 和 & 的区别
nohup 和 & 是两个命令,这两个命令可以单独使用,也可以组合使用。
&
指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出。
nohup
不挂断的运行,注意并没有后台运行的功能就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行。
nohup <命令> &
这样就能使命令永久的在后台执行。
nohup 默认行为
三个常用的流都会在 nohup
中被使用到:标准输入流、标准输出流、标准错误输出流。其中,输入流很少使用(本篇文章终极解决办法小节使用到了),我们最多的关注两个输出流即可。
下面列出nohup的默认行为:
- 如果nohup命令的标准输入是终端,那么nohup将会默认使用/dev/null来重定向。
- 如果nohup命令的标准输出是终端,那么标准输出会被附加到文件nohup.out中;如果用户没有在当前目录创建文件的权限,那么就会把输出附加到$HOME/nohup.out中;如果还是没有写入权限,那么该命令就不会执行。
- 如果nohup命令的标准错误是终端,那么就会被定向到标准输出的附加的文件描述符。如果标准输出被关闭了,那么标准错误就会像上面一样尝试附加到nohup.out或$HOME/nohup.out中。
脚本中使用 nohup 的问题
温馨提示: 以下内容特别重要
温馨提示: 以下内容特别重要
温馨提示: 以下内容特别重要
如果我们在shell中执行nohup
命令,并且没有进行任何重定向,那么终端上就会弹出“nohup: ignoring input and appending output to ‘nohup.out’”,并且,只有敲击回车,shell才能继续执行,否则就会卡住,
nohup卡住时,你的命令还没有执行,这时还在 nohup 的逻辑里面,这时如果没有按回车键就关闭终端,会退出nohup(相当于放弃执行nohup),并且你的命令程序依然处于未执行状态
一般解决办法:
在使用 nohup
命令时,将标准输出流和标准错误流指定到文件中即可解决大多数nohup卡主的问题, 例如:
nohup sh nohup_test.sh >out.log 2>&1 &
终极解决办法:
一般解决办法只能避免 标准错误不会弹出提示。但是有些标准错误还会有附加文件,附加文件会出现其他的错误提示,我们还需要将标准输入也重定向。既:重定向标准输入、标准输入和标准错误输入,这样就不会有任何错误提示,案例:
nohup sh nohup_test.sh >out.log 2>&1 </dev/null &
nohup 相关内容
这里之列出可能会使用到的工具
- 我们可以使用
job
查看任务,具体使用请自行百度 - 用
fg
工具可以关闭任务
后记
如果将中文中的内容认真阅读并理解,那么nohup将会给你非常大的帮助。编辑文章不易,如果这篇文章对你有帮助,可以在下方打赏哦。