Skip to content

如何保持服务器在 Linux 服务器中后台运行

由于Linux的会话机制,在ssh断开连接之后手动启动的服务端会停止运行,而我们需要服务端保持后台运行。

方法一 screen(推荐)

使用screen创建一个虚拟的窗口运行服务端,首先安装screen,在终端输入:

确保你的系统上有screen包,没有的话安装它们:

screen 的基础指令:

shell
screen -ls            # 列出所有的 screen
screen -S xxx         # 创建一个名叫 xxx 的虚拟窗口(推荐以每个子服务器命名)
screen -r xxx         # 进入 xxx 虚拟窗口(只能进入已创建且无人使用的 screen)
screen -D xxx         # 踢出正在使用 xxx 窗口的用户
screen -S xxx -X quit # 删除 xxx 窗口(在 screen 中输入 exit 也可以删除)

INFO

重新连接到screen时可以使用 screen -Dr xxx指令,意为踢出正在使用 xxx 窗口的用户并回到 xxx 窗口

在 screen 中启动服务端,在 screen 中时,按快捷键 Ctrl + A + D 即可返回原窗口。

推荐原因:后台运行的同时还可以在服务端控制台中查看日志,打指令

方法二 面板(推荐)

例如 mcsm,简单无脑可视化

方法三 Systemd

使用 vim 命令创建 mc.service 单元文件

bash
vim ~/.config/systemd/user/mc.service

文件中的内容按以下配置

ini
[Unit]
Description=Minecraft Server
After=network.target

[Service]
WorkingDirectory=这里填工作目录路径
ExecStart=这里填启动命令
ExecStop=/bin/kill -SIGINT $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

配置完成后输入以重新加载:

bash
systemctl daemon-reload

然后启动服务器并设置开机启动,先后输入:

bash
systemctl --user start mc.service
systemctl --user enable mc.service

可以通过systemctl --user status mc.service查看服务运行状态。

详细设置说明

Arch wiki 上的教程

优点:可以实现自动重启,开机自启等操作

缺点:无法进入控制台打指令

方法四 nohup和&

&:在启动时后面加一个&

例如:./start.sh &

nohup:在启动时前面加上这个

例如:nohup ./start.sh > run.log 2>&1 &

详细参数:

TIP

Start.sh: 你需要后台运行的程序

: 日志文件追加到文件中

run.log: 运行的日志,或你的文件的输出内容

& 是一个描述符,如果1或2前不加&,会被当成一个普通文件。

1>&2 意思是把标准输出重定向到标准错误.

2>&1 意思是把标准错误输出重定向到标准输出。

&>filename 意思是把标准输出和标准错误输出都重定向到文件filename中