当应用程序可以作为系统服务运行时,为什么要使用nohup?

时间:2017-02-19 12:26:29

标签: linux bash systemd upstart nohup

我把这个问题放在stackoverflow上,因为我已经在这里找到了很多关于这个主题的问题。

简介

简单地说,nohup可以用于在后台运行应用程序,并在用户注销或终端或ssh会话关闭后保持它们运行,例如

这里有很多关于stackoverflow的示例问题,例如thisthat

我的问题很简单。

为什么选择nohup,当有upstartsystemd等选项时,以更方便的方式管理应用作为服务(运行级别,... )?

阅读关于类似主题的许多问题,唯一的选择似乎是nohup。几乎从来没有答案是这样的:“...使用一个新手脚本,所以这一切都是为你处理的......”

我主要会选择例如upstart,除了可能是一个快速而肮脏的测试场景。

我错过了重要的事情吗?

2 个答案:

答案 0 :(得分:5)

nohup快速,简单,不需要root访问权限,也不会在系统中进行永久性更改。这就是为什么许多人使用它(或尝试使用它)而不是配置服务。

在没有任何监督的情况下在后台运行通常是一个坏主意,尽管有许多合法的用例不适合传统的服务模型。例如:

  1. 在某些用户操作之后,有时可能只需要后台进程。
  2. 可能需要多个实例。例如:每个用户一个或每个会话一个。
  3. 进程可能不需要一直运行。它只是在完成工作后退出。
  4. 一些真实世界的例子(使用像nohup这样的东西并且难以作为系统服务实现):

    1. git有时会在后台运行git gc以优化存储库而不会阻止用户工作
    2. adb将在后台启动其服务并保持运行,直到用户要求终止它
    3. 有些编译器可以选择继续在后台运行以减少后续调用的启动时间

答案 1 :(得分:1)

您的理解是正确的,这些问题的回答方式nohup - upstart将是How to make sure an application keeps running on Linux

等不同问题的答案。