You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何编写自动重启停止状态的GlassFish域并排除指定域的脚本?

如何编写自动重启停止状态的GlassFish域并排除指定域的脚本?

我明白你需要一个能自动重启停止状态的GlassFish域,同时要跳过一系列特定命名规则的域,咱们一步一步来实现这个需求。

首先先明确所有需要排除的域规则,避免踩坑:

  • 域名为backup,或者名称以_bak结尾的
  • 名称中包含数字的域
  • 名称是.tar.gz.tar后缀的(比如类似domain1.tar这类)
  • 域名为watchdogdomains_mpfadmin_newlive

接下来,咱们可以用Bash脚本来实现这个逻辑,毕竟GlassFish在Linux环境下用脚本自动化是最方便的。先看核心思路:

  1. 通过asadmin list-domains命令获取所有域的状态信息
  2. 逐个过滤出状态为not running的域
  3. 对每个待处理的域名,检查是否符合排除规则,不符合规则的才执行启动操作

下面是完整的脚本示例:

#!/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

火山引擎 最新活动