【问题标题】:Running the WLST interpreter silently静默运行 WLST 解释器
【发布时间】:2014-02-17 14:17:50
【问题描述】:

我试图找出一种方法让 weblogic WLST 终端在静默模式下运行。 当我使用java weblogic.WLST 命令启动终端时,它会打印以下行:

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

是否有命令行标志或一些未知的巫术使解释器不写这些行? 我一厢情愿地尝试 -s 保持沉默,但无济于事。 我所有的谷歌搜索都把我带到了一个 -i 标志,它做了一些完全不同的事情。

编辑:

澄清我的目的:

我需要解释器来运行 python 脚本,我确实需要它的输出。欢迎信息是无用的混乱,但我想摆脱它。

限于:

我唯一的问题是解释器自己写的第一行。一旦进入 python 脚本,我就可以毫无问题地处理发送到输出的内容。我唯一的问题是上面写的欢迎词。这些是由解释器自己编写的,而不是 python 代码。

【问题讨论】:

  • 为什么你需要摆脱这个?将所有输出重定向到一个文件不是很简单,例如java weblogic.WLST > ./mylog.log
  • 我需要将 python 脚本的输出重定向到调用 shell 脚本中。我不需要启动消息,它只是我不需要的混乱。我想我可以用 sed 或 grep 摆脱它,但这是一个 hack,可以让我获得一张通往开发者地狱的单程票...... :)
  • python 脚本的第一条语句可以重定向(myWlstLogFile)。其中 myWlstLogFile 是您希望 wlst 代码将日志写入的日志文件位置。日志文件 loc 可以作为参数传递给您的 python 脚本。 Check this
  • 我已经这样做了。但是,这不会从解释器中删除欢迎消息。
  • @MartinNielsen,你有没有找到解决方案?我正在尝试对我们想要使用 watch 命令运行的基于 python 的 wlst 脚本做同样的事情...... wlst 输出日志正在搞乱手表输出!我们对将日志重定向到文件或类似的东西不感兴趣,所以这些解决方案不好......

标签: weblogic wlst


【解决方案1】:

为了解决这个问题,我做了一些不同的事情。 我在输出中放了一个grep -v .. 像这样:

java weblogic.WLST script.py $ARGS | grep -v "初始化WebLogic 脚本工具 (WLST) ..." | grep -v "欢迎使用 WebLogic Server 管理脚本 Shell" | grep -v "键入 help() 以获取有关 可用命令" | grep -v "成功连接到管理服务器 \"AdminServer\" 属于域 \"domain\"。" | grep -v “警告:使用了不安全的协议连接到服务器。” | grep -v "为了确保在线安全,SSL 端口或管理端口 应该改用。" | grep -v "位置更改为 domainRuntime 树。这是一棵只读树” | grep -v “以 DomainMBean 作为 root MBean。" | grep -v "如需更多帮助,请使用 help('domainRuntime')" | grep -v "成功连接到管理服务器" | grep -v "正在连接 到 t3://"

【讨论】:

  • 这个不错。我是用 egrep 做的。从常规 WLST 输出的头部和尾部删除所有不必要的行。 /oracle/fmwhome/oracle_common/common/bin/wlst.sh wls_soa_dms.wlst -c 2 -d 2 | egrep -v 'CLASSPATH|初始化 WebLogic 脚本工具|欢迎使用 WebLogic Server Administration Scripting Shell|键入 help() 以获取有关可用命令的帮助|连接到|成功连接到|警告:使用不安全的协议连接到|为了确保在线安全|应改用管理端口|与 weblogic 服务器断开连接|正在退出 WebLogic 脚本工具|^$'
【解决方案2】:

试试这个:

就像你说的“这是一个 hack”,但它是一个相当优雅的 hack。

创建文件runwlst.sh:

#!/bin/bash
. ${WLS_HOME}/server/bin/setWLSEnv.sh >/dev/null 2>&1
FILENAME=$1
shift
java weblogic.WLST ${FILENAME} "$@" | sed -e "1,7 d"

需要设置WLS_HOME,或者使用绝对路径设置WLSEnv.sh。

然后像这样将您的 WLST 脚本创建为“shell”脚本(我喜欢为我的脚本使用“.wlsh”扩展名):

#!/bin/bash /absolute_path_to_runwlst.sh/runwlst.sh
# your WLST Python code starts here
import ...

显然,runwlst.sh 中使用的 sed 脚本仅在“Initializing”横幅长度为 7 行时才有效,这可能会随着新版本或 WLS 补丁而改变。

此解决方案的好处是现在您可以像这样从命令行运行 WLST 脚本:

$ createManagedServer.wlsh domain servername 

或者使用 WLST 脚本是其他 shell scipts 像这样:

#!/bin/bash
PORT=`./getPortForManagedServer.wlsh domain server`
echo ${PORT}

你得到了图片

【讨论】:

  • 这很优雅。我想我实际上可能会为此交换我自己的技巧。我现在在每个脚本中都有一个 sed 命令:)
  • 我正在尝试通过 tail +7 而不是 sed 来传递它。不过,我仍然在中间得到一些空白行,所以我可能需要 sed 来摆脱它们。可惜WLST启动还是没有静音模式。
【解决方案3】:

我希望它只显示我在脚本中打印的行,所以我做的很简单 - 将特殊字符序列添加到我想在日志中看到的所有行(在我的例子中是 print('--> ...'))并启动就是这样:

wlst.sh changePassword.wlst.py "$@" | grep -- "-->"

示例输出:

Executing WLST script for domain SampleDomain
--> Executing credential change for SampleDomain
--> Changing DB password for DSTYPE1
--> Changing password for DataSource SampleDS1
--> Successfully changed DB credentials!
--> Changing password for DataSource SampleDS2
--> No JDBC resource with name SampleDS2 found, skipping...
--> Changing password for DataSource SampleDS3
--> No JDBC resource with name SampleDS3 found, skipping...
--> Changing password for DataSource SampleDS4
--> Successfully changed DB credentials!
Completed execution for domain SampleDomain

【讨论】:

    【解决方案4】:

    有点长镜头,但您也可以通过将 stdout 和 stderr 捕获到不同的流中来使整个 JVM 输出静音,然后将从 weblogic mbeans 捕获的值打印到控制台流。在编写了一个 ansible 模块后,我不得不做类似的事情,该模块要求我将纯 JSON 返回到标准输出,而没有任何消息横幅或其他内容打印到终端。

    根据您的需要,一个可能的解决方案是编写一个 python 脚本,该脚本首先更改输出流,如this example,然后启动WSLT session。只需记住保留控制台输出流的“副本”并使用它们将结果写入。

    【讨论】:

      猜你喜欢
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2020-08-13
      • 2011-02-05
      • 2018-01-19
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多