我以 root 用户身份输入sudo su -
然后打开一个屏幕screen
。然后我运行命令来启动我的 Minecraft 服务器。
之后,我按下Ctrl-A
和分离了屏幕d
。退出计算机后(显然没有关闭计算机),该进程(我的服务器)是否会继续运行?
答案1
Screen 就是用来做这个的。你可以提前通过以下方式进行测试:
$ sudo su -- # Note that you should use 2 dashes, here, if you use any (you don't have to, `sudo su` would do the same thing).
# screen
# # Press [enter].
# sleep 100 && echo foo
# # Press [ctrl]+[A], then [D].
# # Press [ctrl]+[D].
$ sudo su
# screen -r
# # You'll be shown the line you entered before, again. After some time (100 seconds after you entered the 4th line), "foo" will be printed.
所有以 开头的行都$
以普通用户身份执行。所有以 开头的行都#
以 root 身份执行。#
行后面的行标记单行注释的开始。
在第一行中,您以 root 身份登录。您可能应该弄清楚是否有必要以 root 身份运行 Minecraft 服务器。
在第二行中输入screen
。
按下回车键只是为了让打开时不带参数的文本屏幕显示消失。
第四行执行的是代表你的 Minecraft 服务器的命令,休眠 100 秒后打印“foo”。
通过按下crtl+A然后按下D,您可以断开与第 5 行屏幕的连接。
在第 6 行中,按ctrl+可断开与终端会话的连接D。请注意,这会保持终端打开,因为您是以较低级别的普通用户身份登录的。您只能在最高级别断开与终端会话的连接。您以 root 身份注销,exit
如果这样做有助于您了解自己确实在注销,那么不妨这样做。您也可以以普通用户身份注销。只需再次按ctrl+D即可。如果这是最低级别并且您在 tty 上,您将再次看到登录屏幕。如果这是最低级别并且您正在使用终端仿真器,终端窗口将关闭。这绝对没有问题。
在第 7 行,您再次以 root 身份登录。
在第 8 行,奇迹发生了。你screen
使用 flag 进行调用r
,该标志取自screen
手册页 (run man screen
),其含义为:
重新连接会话,如果需要,请先将其分离。
由于您只有一个会话screen
,因此您可以返回正确的会话。
一段时间后,“foo”将打印在屏幕上,这意味着当您连接到屏幕或稍后连接到屏幕时,您将在终端上看到它。您的所有命令及其输出仍然可见。执行发生在您不一定登录时。
答案2
是的,这是 gnu-screen 的要点之一。即使作为普通用户,您也可以使用 来检查在分离 screen 会话后它是否仍在运行pgrep screen
。您也可以运行 pgrep minecraft。我不知道启动 minecraft 的命令,但您可以使用 pgrep 检查 minecraft 服务器进程是否正在运行,但我不知道命令。