F. *_*ell 56
我不知道 raspbian,但由于它源自 Debian,我认为 nohup 也将可用。而不是运行一个进程,
$ proc &
Run Code Online (Sandbox Code Playgroud)
尝试使用:
$ nohup proc &
Run Code Online (Sandbox Code Playgroud)
当终端断开连接时, nohup 将阻止进程终止。哈。
str*_*gee 50
您的问题有点缺乏细节,所以我假设您的意思是您在 Pi 的控制台上键入了启动服务器的命令,并在前台执行。
如果是这种情况,您有五个选项,按实施的复杂程度排序:
使用@f-tussel 的回答。由于您是 GNU/Linux 的新手,该&符号告诉 shell 它应该在后台执行该进程并立即将您返回到提示符,而不是它通常所做的(等待命令完成后再返回您到提示)。这在技术上称为将命令分叉到后台。
做你以前做过的事,但要在一个screen过程中去做。基本上,这需要安装screen(sudo apt-get install screen在您的 Debian 系统上),然后在您键入启动服务器的命令之前的某个时间,您执行screen. 这将打开一个新的 shell,您可以稍后重新连接,即使您的 PuTTY 连接中断。所以它会表现得好像你从未断开连接。
使用永远的node.js 模块。请参阅/sf/ask/335793531/了解我从哪里得到这个。
将您的服务器置于screen后台进程中。这意味着您将screen在后台创建一个新会话,但永远不会附加到它。而且,屏幕进程将运行您的服务器,而不是运行 shell。以下是您要键入的内容:
screen -d -m exec_your_server --put-args-here
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以在启动时运行它。基本上你需要把 screen 命令放在文件中,/etc/rc.local或者/etc/rc.d/rc.local,我忘记了。如果您在执行此操作时遇到麻烦,请提出一个新问题。
同样,你也可以这样做tmux。
编写服务脚本。由于您使用的是 Debian 并且是新手,您大概使用的init是 Debian 提供的默认设置,即 System V Init。我从来没有看过 System V Init 的服务文件,只有 systemd 和一个小新贵,所以我在这里帮不了你。如果您想继续这个问题,请提出一个新问题。
这是最不“hacky”的方式,恕我直言,如果您长期运行服务器,这就是您应该考虑做的事情,因为您可以像系统上的其他服务一样通过诸如sudo service your_server stop等命令来管理它。这种方式将在启动时自动启动您的服务器,您不需要,screen因为它也会在后台自动发生。
它还会自动以 root 身份执行,这很危险 - 您应该在服务器中放置逻辑,通过成为您专门为服务器创建的非特权用户来放弃您拥有的特权。(这是在服务器受到威胁的情况下 - 想象一下,如果有人可以通过您的服务器以 root 身份运行东西!呃。这个问题可以很好地讨论这个问题。)
如果您真的很认真,请使用supervisord。
这样做以运行二进制文件的基本方法:
$ nohup node app &
$ echo $! > node-instance.pid
Run Code Online (Sandbox Code Playgroud)
然后,当你想杀死它时,
$ kill `cat node-instance.pid`
Run Code Online (Sandbox Code Playgroud)
但我会使用supervisord。它可以让你做很多花哨的事情。
如果您正在运行 bash 一个 shell,您也可以使用该disown命令,该命令的结果与该nohup命令相同,只是它采用它找到的第一个正在运行的程序。例如 :
$ command &
$ disown
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建一个脚本来分叉您的进程并杀死父亲,以便 init 继承孩子。例如,这就是我为脚本所做的。它并不简单,但是当您启动它时,它会自动进入后台并且在您注销时不会终止。
另一种解决方案是创建一个服务文件并启用它,以便您可以使用简单的命令启动、停止、重新启动或执行任何操作。(但我真的不知道 debian 是否使用 systemd,因为我使用的是 archlinux)
| 归档时间: |
|
| 查看次数: |
288097 次 |
| 最近记录: |