什么是nohup
nohup 是一个命令启动模式,全称为no hang up ,即以此启动的命令或程序,不会因为用户登出、结束当前session而挂断。
nohup的使用技巧
基础使用
使用方式为nohup mycommand
这种方式使用后,命令将以nohup的方式前台执行,用户无法再操作当前session,只有等到该服务执行完成才可以。
后台运行
上述方式比较鸡肋,你启动一个服务后,自己什么都不能干了。所以一般会加上&
,以后台方式执行程序
nohup mycommand &
上述方式执行后,console中一般会输出形如以下的信息,该信息为命令对应进程的id,方便用户基于此id去做一些管理,比如杀掉该程序
[1] 25132
重定向输出文件
nohup启动的命令,默认会将命令的所有输出(普通输出或错误输出),都写入当命令执行的当前路径,或用户的home路径下,名为nohup.out
。
可以通过i/o重定向,将其输出到你指定路径的指定文件。比如
nohup mycommand > result.log &
当然,你也可以将正常输出和错误输出分开,下述的2代表标准错误输出
nohup mycommand > result.log 2>err.log &
忽略掉标准输入的任何信息
上述以后台执行程序后,但依然拥有当前console的标准输入,如果用户没有登出,而是继续进行一些操作,很可能一些输入被后台运行的程序响应了,从而被hang住。所以为了避免这种情况,可以将nohup运行的程序的标准输入替换成/dev/null,也即,nothing。
nohup mycommand > result.log 2>err.log < /dev/null &
recap最佳实践
综上,最好以如下形式来使用nohup
nohup mycommand > result.log 2>err.log < /dev/null &
参考链接
https://unix.stackexchange.com/questions/230887/what-does-dev-null-mean#:~:text=program <%2Fdev%2Fnull means,the file %2Fdev%2Fnull .
https://linuxize.com/post/linux-nohup-command/
https://en.wikipedia.org/wiki/Nohup
https://www.computerhope.com/unix/unohup.htm