核心要点
在执行任何停止命令之前,请务必注意:

- 安全停止:优先使用程序自带的、设计好的停止命令,这可以确保服务器程序有机会完成正在处理的事务、保存数据,并优雅地关闭所有连接,而不是直接杀死进程,这可能导致数据损坏或服务中断。
- 确认操作:在服务器上执行停止命令前,确保你知道其影响,尤其是在生产环境中。
Minecraft (我的世界) 服务器
这是 stop 命令最经典和直接的应用场景。
-
命令:在服务器控制台(通常是终端窗口)中直接输入:
stop
-
作用:服务器会向所有在线玩家广播 "Server shutting down..." 消息,然后保存所有世界数据,并安全地关闭程序。
-
相关命令:
(图片来源网络,侵删)save-all:在stop之前手动保存一次世界数据,更安全。save-off:暂停自动保存,通常在执行备份前使用。save-on:恢复自动保存。
Minecraft 代理服务器 (如 BungeeCord, Waterfall, Velocity)
代理服务器的停止命令略有不同,因为它需要先踢掉所有连接到它的游戏服务器上的玩家。
- 命令:在代理服务器控制台中输入:
end
- 作用:
end命令会通知所有后端的游戏服务器停止,然后将所有玩家踢出,最后关闭代理服务器本身。stop命令通常只关闭代理服务器,而不会通知后端服务器,可能导致玩家卡住。
Minecraft 服务器管理面板 (如 PM2, PocketMine-MP)
这类服务器通常有自己的管理脚本。
-
PM2 (Node.js 进程管理器,常用于 Minecraft 服务器或 Node.js 应用)
- 停止并删除进程:
pm2 stop <app_name_or_id> pm2 delete <app_name_or_id>
- 停止所有进程:
pm2 stop all
- 停止并删除进程:
-
PocketMine-MP (PHP Minecraft 服务器)
(图片来源网络,侵删)- 命令:在控制台中输入:
stop
- 或者使用系统命令:
# 查找进程 ID ps aux | grep "PocketMine-MP" # 然后杀死进程 (不推荐,除非无响应) kill <PID>
- 命令:在控制台中输入:
Web 服务器 (Apache, Nginx)
Web 服务器的停止方式通常通过系统服务管理命令。
-
Apache (httpd)
-
停止服务:
# 对于使用 systemd 的系统 (如 Ubuntu 16+, Debian 8+, CentOS 7+) sudo systemctl stop apache2 # 或者 sudo systemctl stop httpd # 对于旧版系统 (使用 SysVinit) sudo /etc/init.d/apache2 stop # 或者 sudo service apache2 stop
-
-
Nginx
-
停止服务:
# 对于使用 systemd 的系统 sudo systemctl stop nginx # 对于旧版系统 sudo /etc/init.d/nginx stop # 或者 sudo service nginx stop
-
数据库服务器 (MySQL, MariaDB)
停止数据库服务器风险较高,因为它可能正在写入数据。
-
安全停止 (推荐):它会等待所有正在执行的语句和所有更新都完成后才关闭。
# 进入 MySQL/MariaDB 命令行 mysql -u root -p # 在 MySQL 提示符下执行 SHUTDOWN;
或者使用系统命令:
sudo systemctl stop mysql # 或 sudo systemctl stop mariadb
-
快速停止 (不推荐):它会立即关闭服务器,可能会导致数据损坏,仅在紧急情况下使用。
sudo systemctl stop mysql --force # 或 sudo systemctl stop mariadb --force
应用服务器 (如 Tomcat, Jetty)
-
Apache Tomcat
-
使用脚本:最推荐的方式,位于 Tomcat 的
bin目录下。# Linux / macOS ./shutdown.sh # Windows shutdown.bat
-
使用系统服务:Tomcat 被配置为系统服务。
sudo systemctl stop tomcat9 # 或 tomcat8, tomcat10 等
-
-
Jetty
-
使用脚本:
# Linux / macOS ./jetty-stop.sh # Windows jetty-stop.bat
-
通用方法 (如果以上都不适用)
如果你不知道服务器程序的具体停止命令,或者它已经无响应,可以使用通用的操作系统命令来强制终止进程。这是最后的手段,有数据丢失风险。
-
查找进程 ID (PID):
# 根据进程名查找 (查找 java 进程) ps aux | grep java # 输出示例: # user 12345 5.3 20.1 876543 987654 ? Sl 10:30 120:45 java -Xms4G -Xmx8G -jar server.jar # 这里的 12345 就是进程 ID
-
终止进程:
kill- 优雅地终止:首先尝试发送SIGTERM信号,让程序有机会自己清理并退出。kill 12345
kill -9或pkill -9- 强制杀死:kill无效,使用SIGKILL信号强制立即终止,程序无法做任何清理工作。kill -9 12345 # 或者直接用进程名杀死所有同名进程 pkill -9 java
总结表格
| 服务器类型 | 推荐停止命令 | 备注 |
|---|---|---|
| Minecraft (游戏) | stop |
在服务器控制台输入。 |
| Minecraft (代理) | end |
会通知后端服务器并踢出玩家。 |
| Apache | sudo systemctl stop apache2 |
使用系统服务管理器。 |
| Nginx | sudo systemctl stop nginx |
使用系统服务管理器。 |
| MySQL/MariaDB | mysql> SHUTDOWN; 或 sudo systemctl stop mysql |
优先使用 SQL 命令安全关闭。 |
| Tomcat | ./shutdown.sh |
使用其自带的脚本。 |
| 通用 Node.js/PM2 | pm2 stop <app_name> |
使用 PM2 进程管理器。 |
| 未知/无响应 | kill -9 <PID> |
最后手段,强制终止,有风险。 |
希望这份详细的指南能帮助你正确地停止你的服务器!
