【发布时间】:2022-03-18 06:46:14
【问题描述】:
我有一个 bash 脚本(由 Jenkins 执行),它在某一时刻调用
local STATUS=$($SERVER_DIR/bin/jboss-cli.sh --controller=$WILDFLY_CONTROLLER --connect --user=$ADMIN_USER --password=$ADMIN_PW command=:shutdown --timeout=$JBOSSTIMEOUT);
这个 sn-p 的唯一目的是关闭正在运行的 Wildfly 进程。如果调用本身成功,但无论出于何种原因,wildfly 都没有终止,我还添加了另一项检查,几秒钟后执行
SERVER_PID=`ps aux | grep $SERVER_DIR | grep 'wildfly.xml' | grep -v grep | tr -s ' ' | cut -d ' ' -f 2`;
if [[ ! -z $SERVER_PID ]] ; then
kill -9 $SERVER_PID;
fi
但是,有时 - 我无法弄清楚在哪种情况下 - sn-p 的行为与预期不同。
问题类型 1)
调用 jboss-cli.sh 导致异常
> 2019-02-27_22-05-17 [INFO] Trying to stop wildfly service with jboss-cli.sh /opt/wildfly/bin/jboss-cli.sh --controller=10.0.1.1:9990 --connect --user=XXXX --password=XXXX command=:shutdown --timeout=120 org.jboss.as.cli.CliInitializationException: Failed to connect to the controller at org.jboss.as.cli.impl.CliLauncher.initCommandContext(CliLauncher.java:278) at org.jboss.as.cli.impl.CliLauncher.main(CliLauncher.java:241) at org.jboss.as.cli.CommandLineMain.main(CommandLineMain.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.modules.Module.run(Module.java:312) at org.jboss.modules.Main.main(Main.java:460) Caused by: org.jboss.as.cli.CommandLineException: The controller is not available at 10.0.1.27:9990 at org.jboss.as.cli.impl.CommandContextImpl.tryConnection(CommandContextImpl.java:1028) at org.jboss.as.cli.impl.CommandContextImpl.connectController(CommandContextImpl.java:840) at org.jboss.as.cli.impl.CommandContextImpl.connectController(CommandContextImpl.java:819) at org.jboss.as.cli.impl.CliLauncher.initCommandContext(CliLauncher.java:276) ... 8 more Caused by: java.io.IOException: java.net.ConnectException: JBAS012144: Could not connect to http-remoting://10.0.1.1:9990. The connection timed out at org.jboss.as.controller.client.impl.AbstractModelControllerClient.executeForResult(AbstractModelControllerClient.java:129) at org.jboss.as.controller.client.impl.AbstractModelControllerClient.execute(AbstractModelControllerClient.java:71) at org.jboss.as.cli.impl.CommandContextImpl.tryConnection(CommandContextImpl.java:1005) ... 11 more Caused by: java.net.ConnectException: JBAS012144: Could not connect to http-remoting://10.0.1.1:9990. The connection timed out at org.jboss.as.protocol.ProtocolConnectionUtils.connectSync(ProtocolConnectionUtils.java:119) at org.jboss.as.protocol.ProtocolConnectionManager$EstablishingConnection.connect(ProtocolConnectionManager.java:256) at org.jboss.as.protocol.ProtocolConnectionManager.connect(ProtocolConnectionManager.java:70) at org.jboss.as.protocol.mgmt.FutureManagementChannel$Establishing.getChannel(FutureManagementChannel.java:204) at org.jboss.as.cli.impl.CLIModelControllerClient.getOrCreateChannel(CLIModelControllerClient.java:169) at org.jboss.as.cli.impl.CLIModelControllerClient$2.getChannel(CLIModelControllerClient.java:129) at org.jboss.as.protocol.mgmt.ManagementChannelHandler.executeRequest(ManagementChannelHandler.java:117) at org.jboss.as.protocol.mgmt.ManagementChannelHandler.executeRequest(ManagementChannelHandler.java:92) at org.jboss.as.controller.client.impl.AbstractModelControllerClient.executeRequest(AbstractModelControllerClient.java:236) at org.jboss.as.controller.client.impl.AbstractModelControllerClient.execute(AbstractModelControllerClient.java:141) at org.jboss.as.controller.client.impl.AbstractModelControllerClient.executeForResult(AbstractModelControllerClient.java:127) ... 13 more packet_write_wait: Connection to XXX.XXX.XXX.XXX port 22: Broken pipe Build step 'Execute shell' marked build as failure
这反过来会中止 bash 脚本,从而中止 Jenkins 作业。 那么,问题 1:如何捕获异常并确保处理 bash 脚本并使用 kill-switch 终止 wildfly。
问题类型 2)
有时通话冻结,控制台只显示我
2019-02-27_22-05-17 [INFO] 尝试使用 jboss-cli.sh 停止 wildfly 服务 /opt/wildfly/bin/jboss-cli.sh --controller=10.0.1.1:9990 --connect --user=XXXX --password=XXXX command=:shutdown --timeout=120
jboss 的 timeout 属性似乎没有正常工作。 那么,问题 2:如何确保呼叫已终止并且不会无限期地运行/等待?
谢谢, 理查德
【问题讨论】:
-
bash 中没有例外。很可能你得到一个状态码 != 0 并且你的脚本正在某处检查该值。如果您想要更全面的答案,请发布您的脚本代码。
-
另外,请将每个问题作为一个单独的问题发布到 stackoverflow 上。
标签: bash jenkins jboss wildfly