当应用程序可以 运行 作为系统服务时,为什么要使用 nohup?
Why use nohup when the app can be run as system service?
我把这个问题放在了 Whosebug 上,因为我已经在这里找到了很多关于这个主题的问题。
简短介绍
简而言之,nohup
可用于 运行 应用程序在后台,并在用户注销或终端或 ssh 会话关闭后 运行 保持它们 运行ning,例如
Whosebug 上有很多示例问题,例如 or that。
我的问题很简单
为什么选择 nohup
,因为有 upstart
、systemd
等选项,可以更方便地将应用程序作为服务进行管理(运行等级,...)?
阅读了很多关于类似主题的问题,唯一的选择似乎是nohup
。几乎从来没有答案是这样的:"...使用新贵脚本,所以一切都为您处理..."
我主要会选择例如upstart
,除了快速而肮脏的测试场景。
我是不是漏掉了什么重要的东西?
您的理解是正确的,这些问题的自然答案是 nohup
- upstart
将是另一个问题的答案,例如 How to make sure an application keeps running on Linux
nohup
快速、简单,不需要 root 访问权限,也不会在系统中进行永久更改。这就是为什么许多人使用它(或尝试使用它)而不是配置服务的原因。
运行 在没有任何监督的情况下在后台运行通常是一个坏主意,尽管有许多不适合传统服务模型的合法用例。例如:
- 仅在某些用户操作后,有时才需要后台进程。
- 可能需要不止一个实例。例如:每个用户一个或每个会话一个。
- 进程可能不需要一直 运行ning。它在完成工作后就退出了。
一些现实世界的例子(使用类似 nohup
的东西并且很难作为系统服务实现):
git
有时会 运行 git gc
在后台优化存储库而不阻止用户工作
adb
将在后台启动其服务并保持 运行ning 直到用户要求终止它
- 一些编译器可以选择在后台保留 运行ning 以减少后续调用的启动时间
我把这个问题放在了 Whosebug 上,因为我已经在这里找到了很多关于这个主题的问题。
简短介绍
简而言之,nohup
可用于 运行 应用程序在后台,并在用户注销或终端或 ssh 会话关闭后 运行 保持它们 运行ning,例如
Whosebug 上有很多示例问题,例如
我的问题很简单
为什么选择 nohup
,因为有 upstart
、systemd
等选项,可以更方便地将应用程序作为服务进行管理(运行等级,...)?
阅读了很多关于类似主题的问题,唯一的选择似乎是nohup
。几乎从来没有答案是这样的:"...使用新贵脚本,所以一切都为您处理..."
我主要会选择例如upstart
,除了快速而肮脏的测试场景。
我是不是漏掉了什么重要的东西?
您的理解是正确的,这些问题的自然答案是 nohup
- upstart
将是另一个问题的答案,例如 How to make sure an application keeps running on Linux
nohup
快速、简单,不需要 root 访问权限,也不会在系统中进行永久更改。这就是为什么许多人使用它(或尝试使用它)而不是配置服务的原因。
运行 在没有任何监督的情况下在后台运行通常是一个坏主意,尽管有许多不适合传统服务模型的合法用例。例如:
- 仅在某些用户操作后,有时才需要后台进程。
- 可能需要不止一个实例。例如:每个用户一个或每个会话一个。
- 进程可能不需要一直 运行ning。它在完成工作后就退出了。
一些现实世界的例子(使用类似 nohup
的东西并且很难作为系统服务实现):
git
有时会 运行git gc
在后台优化存储库而不阻止用户工作adb
将在后台启动其服务并保持 运行ning 直到用户要求终止它- 一些编译器可以选择在后台保留 运行ning 以减少后续调用的启动时间