我有一个init.d
脚本,我希望它在后台运行,即使我从终端退出也是如此。但是我已经尝试让它在后台运行nohup
但“没有希望”,因为当我退出时,通过查看pstree
我可以看到 PID 消失并因此nohup
停止工作。
问:nohup
除了将在前台运行的脚本推送到后台之外,还有其他方法吗,即使在您退出终端后也是如此?
我有一个init.d
脚本,我希望它在后台运行,即使我从终端退出也是如此。但是我已经尝试让它在后台运行nohup
但“没有希望”,因为当我退出时,通过查看pstree
我可以看到 PID 消失并因此nohup
停止工作。
问:nohup
除了将在前台运行的脚本推送到后台之外,还有其他方法吗,即使在您退出终端后也是如此?
好的,所以有几种选择:
disown
您可以组合
disown
并将&
脚本推送到后台[your_script]
可以通过jobs
命令查看。输入后,您将看到:而杀人可以通过
kill %1
,1
指的是上面看到的工号。这是更好的替代方法,nohup
因为它不会让nohup.out
文件散落在整个文件系统中。screen
是一个“虚拟”终端,您可以从“真实”终端运行它(实际上今天所有的终端都是“虚拟”的,但这是另一天的话题)。
Screen
即使您的 ssh 会话断开连接,它也会继续运行。您在会话中启动的任何进程都screen
将继续在该屏幕会话中运行。当您重新连接到服务器时,您可以重新连接到屏幕会话,除了过去的时间之外,一切都好像什么都没发生。优秀来源:Speaking UNIX: Stayin' alive with Screen”。
我不能完全理解你的问题,但是......
就我而言,我
screen
用于如此长时间运行的后台作业。它提供虚拟终端,可以随时附加/拆卸。因此,我可以在不关闭虚拟会话的情况下从原始会话注销,并在需要时随时取回该会话。无论如何,这不适用于 init.d 风格的脚本。
&
在脚本中的命令之后使用,例如:我必须通过 SSH(在 QNAP nas 上)运行长时间运行的命令 (rsync)。那台机器没有安装 nohup 或 screen 。我希望能够运行该命令,而无需让我的笔记本电脑一直运行 ssh 客户端。此处建议的带有背景或符号 (&) 的答案根本不起作用。人们可能不知道 nohup 实际上屏蔽了 SIGINT 和 SIGTERM 中断的进程。因此,如果没有 nohup,每当我断开 ssh 会话时,我都会遇到以下错误:
所以在我的例子中,setsid 帮助而不是 nohup。
你需要: