java如何在运行时更新bash脚本或轻松重新启动它?
我需要一种方法来轻松地重新启动/替换bash脚本,而无需再次手动停止/启动该过程
以下是我当前脚本的工作方式:
#!/bin/sh
while true
do
echo "1"
java -server -Xms2G -jar game.jar nogui
done
基本上,如果游戏停止,它将自动重新启动,但是,脚本已经加载到内存中,因此如果我要修改它,我必须手动终止脚本并重新启动,以便更改生效。我正在运行至少200个游戏服务器实例,因此,手动执行此操作并杀死,然后再次手动启动每个脚本是不明智的
当游戏服务器停止时,我希望它更新脚本,下面是一个我可能想做的示例:
#!/bin/sh
while true
do
echo "1"
echo "2"
java -server -Xms2G -jar game.jar nogui
done
但是,我需要亲自停止脚本并重新启动它,以便它添加新的“echo“2”,我需要一种更简单的方法来替换正在运行的脚本
脚本本身将在游戏停止时下载更新的脚本(因此它将自动重新启动)
如何使脚本从内存中卸载自己,并使用新脚本
如果我不能做到这一点,有没有其他方法可以建议
# 1 楼答案
另一种方法是使用过程监督工具,如runit、daemontools、upstart、supervisord、systemd等
对于其中任何一个,您只需编写以下脚本:
。。。监督工具将负责在退出时重新启动服务器,每次需要运行脚本时都重新读取脚本(从而响应更新)
这些工具提供的功能远不止可靠的重启,它们通常还可以管理日志记录、分阶段关机(即TERM+timeout+KILL)、自定义清理命令、信号挂钩等
另见ProcessManagement page on the freenode #bash wiki
如果你不能使用流程管理系统(你真的应该这么做!),你可以让脚本自己执行。也就是说:
请注意,由于与BashFAQ #28相关的各种原因,这是不可靠的
# 2 楼答案
调用以下文件
myscript.sh
。每次游戏停止时,它都会将自己重新加载到内存中: