gpt4 book ai didi

java - 如何在运行时更新 bash 脚本或轻松重新启动它?

转载 作者:行者123 更新时间:2023-12-01 13:29:27 25 4
gpt4 key购买 nike

我需要一种方法来轻松重新启动/替换 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””,我需要一种更简单的方法来替换正在运行的脚本。

当游戏停止时,脚本本身会下载更新的脚本(因此它会自动重新开始。

如何使脚本从内存中卸载并使用新脚本?

如果我不能这样做,您可以建议其他方法吗?

最佳答案

另一种方法是使用进程监控工具,例如 runit , daemontools , upstart , supervisord , systemd

对于其中任何一个,您只需编写以下脚本:

#!/bin/sh
exec java -server -Xms2G -jar game.jar nogui

...监督工具将负责在退出时重新启动服务器,在每次需要运行时重新读取脚本(从而响应更新)。

这些工具为您提供的功能远不止可靠的重启——它们通常还管理日志记录、分阶段关闭(即 TERM + 超时 + KILL)、自定义清理命令、信号 Hook 等。

另请参阅ProcessManagement page on the freenode #bash wiki .

<小时/>

如果您无法使用进程管理系统(而且您真的非常应该!),您可以让脚本执行本身。也就是说:

#!/bin/sh
# ...do stuff here...
exec "$0" "$@" # and restart

请注意,由于与BashFAQ #28相关的各种原因,这是不可靠的。 .

关于java - 如何在运行时更新 bash 脚本或轻松重新启动它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com