nohup 的替代品?

nohup 的替代品?

我有一个init.d脚本,我希望它在后台运行,即使我退出终端也是如此。但是我尝试过让它在后台运行,但nohup“没有希望”,因为当我退出时,通过查看,pstree我可以看到 PID 消失了,因此nohup停止了工作。

问:除了nohup将在前台运行的脚本推送到后台,甚至在退出终端后,还有其他方法吗?

答案1

好的,所以有几个选择:

  • disown

您可以结合使用disown并将&脚本推送到后台

$ disown [your_script] &
[your_script]可以通过命令检查jobs。输入后你会看到:

$ jobs
[1]+ Running [your_script]

可以通过 来终止kill %11指的是上面看到的作业编号。这是 的更好替代方案,nohup因为它不会让nohup.out文件散落在文件系统中。

  • screen

是一个“虚拟”终端,您可以从“真实”终端运行它(实际上,当今的所有终端都是“虚拟”的,但这是另一天的主题)。Screen即使您的 ssh 会话断开连接,它仍将继续运行。您在会话中启动的任何进程都screen将与该屏幕会话一起继续运行。当您重新连接到服务器时,您可以重新连接到屏幕会话,除了时间流逝之外,一切都会像什么都没发生一样。

优秀来源:畅谈 UNIX:Screen 助您活力十足”

答案2

我不能完全理解你的问题但是......

就我而言,我使用它screen来完成这种长时间运行的后台作业。它提供虚拟终端,可随时连接/断开。因此,我可以从原始会话中注销而无需关闭虚拟会话,并随时恢复该会话。

无论如何,这不适用于 init.d 风格的脚本。

答案3

&在脚本中的命令后使用如下:

your command here > /dev/null 2>&1 &
exit

答案4

nohup your_command_here  > /dev/null 2>&1 &

你需要:

  1. 使用 nohup 防止进程在退出时被终止
  2. 将 stdout 和 stderror 从终端的输出流中重定向(否则当终端的输出流在终端退出时被终止时,您的进程将会关闭)
  3. 将进程置于后台(即尾部的 & 符号)

相关内容