nohup和screen哪个更适合长时间运行的进程?

33

背景:我有一个运行时间很长的脚本,它会进行数据库架构更改,并且我想在迁移后检查输出结果。我想把它写到文件中。

我一直在阅读有关nohup和screen的stackoverflow帖子。我已经尝试了两种方法并对两种方法都有疑虑。

参考:如何将进程作为后台进程运行而永不死亡?

他们说他们使用了nohup,但putty杀死了这个进程。这怎么可能?我无法在Mac OS X终端中复制它。

使用screen时,我害怕输入exit而不是ctrl + a,d。

此外,当使用screen时,如果只是退出终端应用程序,似乎可以保留状态。

Screen似乎是更好的解决方案,因为你可以打开一堆它们并切换回状态,这真的很方便。

在我的情况下,你会推荐什么呢?我不需要再运行脚本了,还有大约一个月左右的时间(当我有一个发布版本)。我应该变得更熟悉使用screen并坚持使用它吗?


2
nohup与screen有着极大的不同。Screen是一个终端复用器,或者更准确地说是一个终端窗口管理器。Nohup是一个程序,它让你在远程服务器上运行程序时无需担心你的ssh会话是否挂起。 - Alexej Magura
1
我理解它们的区别,但我可以使用screen以一种方式使其在退出后仍然运行。我喜欢这种方式可以冻结终端的状态。 - Chris Muench
3
为了让您知道您的选择,tmux 是另一个类似于 screen 的终端复用程序。我个人使用 nohup 来保持 ssh 会话之外的持久命令,使用 tmux 来保留环境。 - Nicolas De Jay
1个回答

42

两者都有各自的优点和缺点:

nohup:

  1. nohup适用于在后台运行进程,当进程不需要任何用户输入时,如httpd服务器或任何其他服务器进程。
  2. nohup会在进程执行的目录中创建日志文件,默认日志文件名为nohup.out。
  3. 它避免了由于误按ctrl+C、ctrl+D而导致进程被杀死的情况。只是一个安全保障。
  4. 通常已经默认安装了基本设置。无需像screen那样单独安装。
  5. 它的功能非常特定,仅适用于在后台运行作业并转储输出。低内存占用。

screen:

  1. 必须单独安装。您不能去数据中心或登录到任何框中并期望出现screen。
  2. 适合管理多个主题的多个终端并给它们命名。
  3. 它更像是终端管理器,而不是像nohup一样运行进程的指令。
  4. 如果进程需要用户输入,则更适合使用。如安装脚本、y/n提示等。
  5. 拥有众多功能,但也带来了内存问题。但不可否认,其中一些功能确实很好。

总之,两者是由不同的目标制作的两个完全不同的东西,因此比较是困难的。

干杯!


5
我认为您打错了,您本意是写“您不能进入数据中心”,而不是“您可以进入……”,对吗?尽管已经过去三年,但迟到总比不来得好,呵呵。 - Patrik Stas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接