如何从Bash/CLI启停JBoss 5.1中的单个WAR应用?需定时脚本
在JBoss 5.1中单独启停WAR应用(Bash/CLI方案)
完全可以通过Bash/CLI单独启停JBoss 5.1中的WAR应用,无需重启整个JBoss服务。下面是具体实现方案:
核心工具:JBoss自带的twiddle.sh
JBoss 5.1内置了twiddle.sh工具(位于$JBOSS_HOME/bin/目录),它可以通过JMX接口调用MBean来管理部署的应用。
1. 验证目标应用的MBean名称
先确认要操作的WAR对应的MBean标识,执行以下命令列出所有Web部署的MBean:
$JBOSS_HOME/bin/twiddle.sh query 'jboss.web.deployment:*'
输出会类似:
jboss.web.deployment:war=app1.war,id=123456 jboss.web.deployment:war=app2.war,id=789012 jboss.web.deployment:war=app3.war,id=345678
其中war=xxx.war就是我们需要的标识。
2. 单独启停指定WAR应用
停止应用
针对app1.war和app2.war,执行停止命令:
# 停止app1.war $JBOSS_HOME/bin/twiddle.sh invoke "jboss.web.deployment:war=app1.war,id=*" stop # 停止app2.war $JBOSS_HOME/bin/twiddle.sh invoke "jboss.web.deployment:war=app2.war,id=*" stop
id=*用于匹配该WAR对应的任意MBean实例,避免因id变化导致命令失效。
启动应用
需要恢复时,将命令中的stop替换为start即可:
# 启动app1.war $JBOSS_HOME/bin/twiddle.sh invoke "jboss.web.deployment:war=app1.war,id=*" start # 启动app2.war $JBOSS_HOME/bin/twiddle.sh invoke "jboss.web.deployment:war=app2.war,id=*" start
定时维护脚本实现
1. 编写启停脚本
创建maintain_apps.sh脚本,支持stop/start两种操作:
#!/bin/bash # 配置JBoss安装路径 JBOSS_HOME="/opt/jboss-5.1.0.GA" # 指定需要维护的应用列表 TARGET_APPS=("app1.war" "app2.war") # 校验操作参数 ACTION=$1 if [ -z "$ACTION" ] || [[ "$ACTION" != "stop" && "$ACTION" != "start" ]]; then echo "Usage: $0 [stop|start]" exit 1 fi # 执行对应操作 for app in "${TARGET_APPS[@]}" do echo "[$(date)] $ACTION-ing application: $app" # 若JMX连接失败,可添加-s参数指定JMX地址,例如:-s jnp://localhost:1090 $JBOSS_HOME/bin/twiddle.sh invoke "jboss.web.deployment:war=$app,id=*" $ACTION done
2. 赋予脚本执行权限
chmod +x /path/to/maintain_apps.sh
3. 配置定时任务(Crontab)
使用crontab设置维护时段的定时任务,例如:
- 每周日凌晨2点停止目标应用
- 每周日凌晨4点恢复目标应用
编辑当前用户的crontab(建议使用运行JBoss的用户登录后操作):
crontab -e
添加以下内容:
# 周日凌晨2点停止应用 0 2 * * 0 /path/to/maintain_apps.sh stop >> /var/log/jboss_maintain.log 2>&1 # 周日凌晨4点启动应用 0 4 * * 0 /path/to/maintain_apps.sh start >> /var/log/jboss_maintain.log 2>&1
>> /var/log/jboss_maintain.log 2>&1用于将操作日志输出到指定文件,方便后续排查。
注意事项
- 确保执行脚本的用户拥有JBOSS_HOME目录的读写权限,且与运行JBoss的用户一致,避免权限问题。
- 如果
twiddle.sh无法连接JMX,可添加-s参数指定JMX服务地址,默认是jnp://localhost:1090。 - 操作前建议先在测试环境验证命令,避免影响生产系统。
内容的提问来源于stack exchange,提问作者Hussain Akbar
相关产品推荐
相关产品推荐

