我最近在 linux 操作系统上设置了我的游戏服务器,并使用 SSH 运行运行游戏服务器的 java 文件。为了让我能够退出 SSH session 但保持服务器运行,我正在使用 nohup 并创建一个脚本来为我执行此操作:
#!/bin/bash
cd "RSPS"
echo "Booting the RSPS..."
nohup java -Xmx220m -cp bin:lib/* com.ruseps.GameServer &
我可以随时使用 tail
命令查看我的服务器的状态,如下所示:
#!/bin/bash
cd "RSPS"
tail -f nohup.out
但是,我的服务器有关闭 Hook ,它期望 java 文件退出,因此运行 top
然后 kill
服务的 PID 忽略了关闭 Hook ,从而中断“保存”状态并使我的服务器无法启动。
有没有一种方法可以重新打开进程并温和地终止服务,即退出它以便文件可以运行关闭 Hook ?
我目前正在做的不是运行关闭 Hook ,而是通过命令行使用它:
top
kill PID_HERE
最佳答案
In order for me to be able to exit the SSH session but keep the server running, I am using nohup and creating a script which does this for me:
首先:不要那样做!
实现适当的服务。如果运行它的机器使用 systemd,你所要做的就是编写一个单元文件 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-unit_files
如果您的机器使用 init
-script 样式的初始化系统,请复制一些类似网络服务的初始化脚本,例如网络服务器,并根据您的需要进行修改。
请记住,您应该为您的服务器创建一个新的用户/组,以便在启动时检查它是否以 root 身份运行(因为这总是一个坏主意)。
However, my server has shutdown hooks
这些钩子(Hook)是如何实现的?如何通知您的服务器关闭? SIGTERM
信号(这是 kill
发送的默认信号,尽管它的名称如此)是通知进程的标准方式,它们将正常终止。有关详细信息,请参阅官方 Java 文档:https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/signals.html
关于java - 如何在 Linux 中软终止进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55077864/