如何在脚本中更改Glassfish上的管理端口

如何在脚本中更改Glassfish上的管理端口,glassfish,Glassfish,这里有个奇怪的玻璃鱼问题。下面是如何复制它: (1) 安装Glassfish v3 (2) 启动默认域: $GLASSFISH_HOME/bin/asadmin start-domain domain1 (3) 更改管理员端口(您需要输入管理员uid和密码,在我们的脚本中使用-u&-W参数): (4) 关闭域: $GLASSFISH_HOME/bin/asadmin stop-domain domain1 你会发现这是行不通的。你会得到: CLI306 Warning - server is

这里有个奇怪的玻璃鱼问题。下面是如何复制它:

(1) 安装Glassfish v3
(2) 启动默认域:

$GLASSFISH_HOME/bin/asadmin start-domain domain1
(3) 更改管理员端口(您需要输入管理员uid和密码,在我们的脚本中使用-u&-W参数):

(4) 关闭域:

$GLASSFISH_HOME/bin/asadmin stop-domain domain1
你会发现这是行不通的。你会得到:

CLI306 Warning - server is not running.
Command stop-domain executed successfully.
但你的Glassfish流程仍在运行。更糟糕的是,当您尝试启动进程时,会收到一条警告,提示您的某些端口已在使用中。他们当然是,旧流程仍然拥有他们!你唯一的出路是
killall-9java

虽然一些配置更改是动态的,但这一个似乎不是,但域停止假定它是动态的,并使用新端口尝试执行该命令

可能的解决办法是:

(1) 在
domain.xml
上使用
sed
——最好不要这样做,因为在xml代码中进行搜索比较复杂且有风险。我看到Glassfish更改了该文件中属性的顺序,因此我们不能只针对
port=“4848”

(2) 使用脚本安装程序而不是zip文件,并将参数作为应答文件提供给安装程序-这对于需要idem POWENT的安装脚本是有问题的。
(3) 使用定制的Glassfish安装存档zip文件,其中domain.xml已更改-这不是一个选项,因为我们正在设置的端口将来可能会更改


这几乎是一个角落案例的定义,但我们需要解决。现在,我们将访问sed domain.xml,但如果知道是否有一种方法可以通过CLI实现,那就太好了。

sed没有我想象的那么糟糕,下面是我所做的:

cd $GLASSFISH_HOME
sed -i.bak '/<network-listener[^>]*name="admin-listener"/s/port="4848"/port="34848"/g' glassfish/domains/domain1/config/domain.xml
cd$GLASSFISH\u主页
sed-i.bak'/]*name=“admin listener”/s/port=“4848”/port=“34848”/g'glassfish/domains/domain1/config/domain.xml

asadmin认为端口更改是动态的,而实际上不是动态的,这仍然是一个bug,但我可以接受这种攻击。

您可能需要执行以下操作

  • 通过解压缩安装v3
  • 删除域1
  • 使用您喜欢的端口创建新的domain1。 会议将有所有的细节
  • 启动此新域
  • 无需额外启动或停止(如果您愿意记住说“asadmin start domain mydomain”而不是“asadmin start domain”,则可以跳过步骤2)

    cd $GLASSFISH_HOME
    sed -i.bak '/<network-listener[^>]*name="admin-listener"/s/port="4848"/port="34848"/g' glassfish/domains/domain1/config/domain.xml