Pingfan's Blog

理解linux命令 - nohup

字数统计: 694阅读时长: 2 min
2018/11/07 Share

nohup-running

在Linux中有许多命令我们会经常用,比如lscd……但还有些命令为了处理特殊场景,Nohup就是这样的命令,你不需要每天都频繁使用它。但当你遇到需求的时候,它特别有用。

什么是Nohup?

Nohup

Nohup是No hangups的简称,它加在别的命令的前面,告诉linux系统不要将这个命令停止运行——它就像一个辅助工具。被修饰的命令会一直运行到结束。它的使用语法非常简单,像下面这样:

nohup sh your-script.sh &

看到最后面的&了吗?它将这条命令放到后面运行,还给你terminal让你可以继续运行别的命令。

你在命令行中运行的几乎所有命令都可以用nohup来修饰,比如常用的命令、编写的脚本等等。

Nohup.out

因为它可以在后台运行(当前用户看不到它的实时执行结果),所以它需要输出一些结果或者错误消息到日志中,方便你查看——这个日志叫做nohup.out。默认情况下,这个文件存在于当你执行命令时所在目录

Nohup Custom Output

nohup.out是不指定目录时默认的位置。你也可以指定一个路径:

nohup sh your-script.sh > /path/to/custom.out &

和守护进程(Daemons)的区别

看到这里,你可能会想,它与守护进程(daemons)有什么区别呢?它们都是在后台运行,把前台解放出来。但实际并非如此,后台进程(daemons)一直会在后台持续运行,例如nginx守护进程会一直监控客户的请求。守护进程会一直循环运行,因为你不想让它停止。所以,如果你只想运行一遍脚本就结束,那么就不适合使用这种方式。

Nohup是为了执行运行一遍就完事的脚本 ,例如一个脚本,要花大概一个小时才能运行完,但最终不也是运行完了吗?爬虫脚本就完美契合这种情况。当运行的时候,总不能让命令行一直被它占用吧?所以使用nohup让它在后台运行,并且在运行过程中,会实时将结果输出到日志里。

所以,nohup不是一个每天都必须用到的工具,但在特殊场景下真的是不二之选,它的定位介于立马就执行完的脚本持续运行的守护进程之间,当运行需要很长时间才能执行完的脚本时,你不必等待执行结束就可以解放出来命令行干其他的事。


原文:https://www.maketecheasier.com/nohup-and-uses/

CATALOG
  1. 1. 什么是Nohup?
  2. 2. Nohup.out
  3. 3. 和守护进程(Daemons)的区别