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

标签 linux bash systemd upstart nohup

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

简介

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

stackoverflow 上有很多示例问题,比如 thisthat .

我的问题很简单。

为什么选择 nohup,因为有 upstartsystemd 等选项,它们可以将应用程序作为服务进行管理更方便的方式(运行级别,...)?

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


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

我是不是漏掉了什么重要的东西?

最佳答案

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

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

  1. 可能只有在某些用户操作之后才需要后台进程。
  2. 可能需要不止一个实例。例如:每个用户一个或每个 session 一个。
  3. 进程可能不需要一直运行。它只是在完成工作后退出。

一些现实世界的例子(使用类似 nohup 的东西并且很难作为系统服务实现):

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

关于linux - 当应用程序可以作为系统服务运行时,为什么要使用 nohup?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42327173/

相关文章:

mysql INT(11) 错误

regex - sed - 替换几个连续的匹配模式的行

linux - 如何在 bash shell 脚本中包含文件

docker - Docker删除Dangling Images命令在CoreOS systemd单位文件中不起作用

python - 无法在 Lubuntu 上安装任何东西

java - 如何根据操作系统更改文件路径

java - Kryo 序列化导致自定义对象出现致命的 Java 运行时错误

linux 邮件添加内容类型 header 不起作用

bash - 如何将命令输出替换为字符串并将其附加到文件(在 Docker 中运行的 Alpine Linux 中)

linux - 尝试在 systemd 下运行访问 X 服务器的服务