如何编写自动重启停止状态的GlassFish域并排除指定域的脚本?
如何编写自动重启停止状态的GlassFish域并排除指定域的脚本?
我明白你需要一个能自动重启停止状态的GlassFish域,同时要跳过一系列特定命名规则的域,咱们一步一步来实现这个需求。
首先先明确所有需要排除的域规则,避免踩坑:
- 域名为
backup,或者名称以_bak结尾的 - 名称中包含数字的域
- 名称是
.tar.gz或.tar后缀的(比如类似domain1.tar这类) - 域名为
watchdog、domains_mpf、admin_newlive的
接下来,咱们可以用Bash脚本来实现这个逻辑,毕竟GlassFish在Linux环境下用脚本自动化是最方便的。先看核心思路:
- 通过
asadmin list-domains命令获取所有域的状态信息 - 逐个过滤出状态为
not running的域 - 对每个待处理的域名,检查是否符合排除规则,不符合规则的才执行启动操作
下面是完整的脚本示例:
#!/bin/bash # 定义asadmin命令的路径,根据你的实际环境修改 ASADMIN="/path/to/asadmin" # 遍历asadmin list-domains的输出,解析域名和状态 $ASADMIN list-domains | while read -r domain status; do # 先跳过状态不是not running的域 if [ "$status" != "not running" ]; then continue fi # 检查是否符合排除规则,符合任意一条就跳过 if [[ "$domain" == "backup" || \ "$domain" == *_bak || \ "$domain" == *[0-9]* || \ "$domain" == *.tar.gz || \ "$domain" == *.tar || \ "$domain" == "watchdog" || \ "$domain" == "domains_mpf" || \ "$domain" == "admin_newlive" ]]; then echo "跳过排除的域: $domain" continue fi # 执行启动命令 echo "正在启动域: $domain" $ASADMIN start-domain "$domain" done
脚本说明:
- 首先修改
ASADMIN变量为你实际的asadmin命令路径,比如/opt/glassfish/bin/asadmin - 用
while read循环解析asadmin list-domains的每一行,拆分出域名和状态 - 先过滤掉正在运行的域,只处理停止状态的
- 用
[[ ]]的模式匹配来检查所有排除规则,只要符合其中一条就跳过该域 - 对符合条件的域,执行
start-domain命令启动
另外,你之前的伪代码里提到先执行stop-domain检查退出码,其实没必要——因为asadmin list-domains已经能直接给出域的状态,直接根据状态判断更高效,不用额外执行停止命令。
如果需要定时执行这个脚本,比如每天检查一次,可以用Linux的cron来配置,比如:
# 每天凌晨2点执行脚本,输出日志到指定文件 0 2 * * * /path/to/your/glassfish_restart_script.sh >> /var/log/glassfish_restart.log 2>&1
这样就能自动帮你维护GlassFish域的运行状态啦。
备注:内容来源于stack exchange,提问作者achhainsan




