Linux:从文件中读取字符串并在其他脚本中执行命令

标签 linux shell sh

我是 Linux/编码/脚本的新手。

我目前有一个脚本可以在 RHEL 5.5 上启动 OBIEE 应用程序的服务。这是我的脚本中的一个示例:

case "$1" in
    start)
    echo -e "Starting Node Manager..."
    $ORACLE_FMW/wlserver_10.3/server/bin/startNodeManager.sh > startNodemanager.log  2>&1 &
    sleep 30
    echo -e "Starting Weblogic Server...."
    $ORACLE_FMW/user_projects/domains/bifoundation_domain/bin/startWebLogic.sh > startWeblogic.log 2>&1 &

如您所见,我正在尝试使用 30 秒的时间间隔依次启动 2 个服务,而不管第一个服务(节点管理器)是启动还是失败。

我想根据第一个服务 (NodeManager) 的输出(startNodemanager.log)执行/启动第二个服务(weblogic),而不是在脚本中使用静态时间间隔。

当 NodeManager 成功启动时,它会以特定字符串结束其日志文件。例如:

“信息:安全套接字监听器在端口 9556 上启动”

那么是否可以在我的脚本中编写一些命令(代替时间范围)从输出日志中读取该字符串并仅在接收到所需字符串时才执行第二个服务,直到那时才停止执行第二个服务。

谢谢。

=======================

编辑:

我已经按照下面 yingted 的建议更新了脚本。 它还没有解决我的问题。 read 正在推迟触发第二个服务,但即使在日志中记录了所需的消息后也无法触发它。使用您的命令,我更新后的脚本如下所示:

case "$1" in
    start)
    echo -e "Starting Node Manager..."
    $ORACLE_FMW/wlserver_10.3/server/bin/startNodeManager.sh > startNodemanager.log  2>&1 &
    read -r < <(tail -f startNodemanager.log | grep --line-buffered -Fx -- 'INFO: Secure socket listener started on port 9556')
    echo -e "Starting Weblogic Server...."
    $ORACLE_FMW/user_projects/domains/bifoundation_domain/bin/startWebLogic.sh > startWeblogic.log 2>&1 &

问题可能与日志中的消息有关。 实际上,消息“INFO: Secure socket listener started on port 9556”在日志中以时间戳开头。

无论如何我可以添加时间戳作为通配符条目吗?

最佳答案

您的第二个流程应该在第一个流程之后。

read -r < <(tail -f startNodemanager.log | grep --line-buffered 'INFO: Secure socket listener started on port 9556$')

读取命令一直等到 startNodemanager.log 包含以 INFO: Secure socket listener started on port 9556 结尾的行。

read 还接受一个 -t timeout 标志,如果超过超时,它会退出并设置 $? 大于 128。如果它反而成功了,read 返回 0。

关于Linux:从文件中读取字符串并在其他脚本中执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25885460/

相关文章:

C printf 与汇编代码混合时出现段错误(核心已转储)

c++ - Mongoose 网络服务器获取当前工作线程

shell - 如何设置 vimrc 标签以使用 shell 环境变量

python - 用于将 hive 表加载到 Apache solr 的 Shell 脚本失败

linux - 使用 qsub 提交可执行文件+输入文件以创建多个作业

linux - 如何使用此格式保存/.bash_history day :month hour:minute:seconds - command

node.js - 如何设置服务器运行 Node.js?

linux - 如何在 bash 脚本中的 IF 函数中获取特定日期和时间

linux - 获取扩展名前的文件名

BASH 同时将大写字母转换为小写字母,反之亦然