答案1
我不了解 raspbian,但由于它源自 Debian,我认为 nohup 也将可用。而不是运行一个进程,
$ proc &
尝试使用:
$ nohup proc &
nohup 将防止进程在终端断开连接时终止。 HTH。
答案2
你的问题有点缺乏细节,所以我假设你的意思是你在 Pi 的控制台上键入了启动服务器的命令,并且它在前台执行。
如果是这种情况,您有五个选项,按实施的复杂性排序:
使用@f-塔塞尔的回答。由于您是 GNU/Linux 的新手,该
&
符号告诉 shell 它应该在后台执行该进程并立即返回到提示符,而不是通常执行的操作(即等待命令完成后再返回到提示)。从技术上讲,这称为将命令分叉到后台。做你以前做过的事情,但要分阶段进行
screen
。基本上,这需要安装screen
(sudo apt-get install screen
在您的 Debian 系统上),然后在您键入命令启动服务器之前执行screen
.这将打开一个新的 shell,您可以稍后重新连接到该 shell,即使您的 PuTTY 连接中断也是如此。所以它会表现得好像你从未断开过连接一样。使用永远Node.js 模块。看https://stackoverflow.com/questions/4797050/how-to-run-process-as-background-and-never-die我从哪里得到这个的。
将您的服务器置于
screen
后台进程中。这意味着您将screen
在后台创建一个新会话,但永远不会附加到它。并且,屏幕进程将运行您的服务器,而不是运行 shell。您将输入以下内容:screen -d -m exec_your_server --put-args-here
如果您愿意,您可以在启动时运行它。基本上,您需要将 screen 命令放入文件
/etc/rc.local
或中/etc/rc.d/rc.local
,我忘了是哪个了。如果您在执行此操作时遇到麻烦,请提出新问题。同样,你也可以这样做
tmux
。编写服务脚本。由于您使用的是 Debian 并且是新手,因此您可能正在使用 Debian 提供的默认设置
init
,即 System V Init。我从来没有看过 System V Init 的服务文件,只看过 systemd 和一点 Upstart,所以我在这里无法帮助你。如果你想继续这个问题,请提出一个新问题。恕我直言,这是最不“hacky”的方式,如果您长期运行服务器,您应该考虑这样做,因为您可以像系统上的其他服务一样通过诸如 等命令来管理它
sudo service your_server stop
。这种方式将在启动时自动启动您的服务器,并且您不需要,screen
因为它也会在后台自动发生。它还会自动以 root 身份执行,这是危险的 - 您应该在服务器中放置逻辑,通过成为专门为服务器创建的非特权用户来放弃您拥有的特权。 (这是为了防止服务器受到损害 - 想象一下如果有人可以通过您的服务器以 root 身份运行东西!呃。这个问题谈论这个做得很好。)
答案3
使用主管如果你真的很认真的话。
运行二进制文件的基本方法如下:
$ nohup node app &
$ echo $! > node-instance.pid
然后当你想杀掉它的时候
$ kill `cat node-instance.pid`
但我会使用supervisord。它可以让你做很多奇特的事情。
答案4
如果您正在运行 bash shell,则可以选择使用该disown
命令,该命令的结果与该nohup
命令相同,只是它采用它找到的第一个正在运行的程序。例如 :
$ command &
$ disown
或者您可以创建一个脚本来分叉您的进程并杀死父亲,以便子进程由 init 继承。例如,这就是我对脚本所做的事情。它并不简单,但是当您启动它时,它会自动进入后台,并且如果您注销也不会终止。
另一个解决方案是创建一个服务文件并启用它,以便您可以使用简单的命令启动、停止、重新启动或执行任何操作。 (但我真的不知道 debian 是否正在使用 systemd,因为我使用的是 archlinux)