这里有一个奇怪的Glassfish问题。以下是如何重现它:
(1)安装Glassfish v3
(2)启动默认域名:
$GLASSFISH_HOME/bin/asadmin start-domain domain1
(3)更改管理端口(您需要输入admin uid& password,在我们的脚本中我们使用-u& -W参数):
$GLASSFISH_HOME/bin/asadmin set configs.config.server-config.network-config.network-listeners.network-listener.admin-listener.port=34848
(4)关闭域名:
$GLASSFISH_HOME/bin/asadmin stop-domain domain1
你会发现这不起作用。你得到:
CLI306 Warning - server is not running.
Command stop-domain executed successfully.
但您的Glassfish流程仍在运行。更糟糕的是,当您尝试启动该过程时,您将收到一条警告,指出您的某些端口已在使用中。当然他们是,老过程仍然有他们!您唯一的出路是killall -9 java
虽然一些配置更改是动态的,但似乎这不是,但域名假定 动态并使用新端口尝试执行命令。
可能的解决方案是:
(1)在sed
上使用domain.xml
- 不愿意这样做,因为它很复杂&通过XML代码进行风险搜索。我见过Glassfish改变了这个文件中属性的顺序,所以我们不能只为port="4848"
发送
(2)使用脚本安装程序而不是zip文件,并将参数作为答案文件提供给安装程序 - 这对我们的安装脚本来说是有问题的,这些脚本需要具有同等效力。
(3)使用已更改domain.xml的Glassfish安装存档的自定义zip文件 - 不是选项,因为我们设置的端口将来可能会更改。
这几乎是一个角落案例的定义,但我们需要解决。现在我们要sed domain.xml但是很高兴知道是否有可能通过CLI的方式。
答案 0 :(得分:1)
您可能想要执行以下操作......
无需额外启动或停止(如果您愿意记得说'asadmin start-domain mydomain'而不是'asadmin start-domain'
,则可以跳过第2步答案 1 :(得分:0)
Sed并没有我想象的那么糟糕,这就是我所做的:
cd $GLASSFISH_HOME
sed -i.bak '/<network-listener[^>]*name="admin-listener"/s/port="4848"/port="34848"/g' glassfish/domains/domain1/config/domain.xml
这仍然是一个错误,asadmin认为端口更改是动态的,但它不是,但我可以忍受这个黑客。