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

时间:2014-09-17 08:11:57

标签: 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成功启动时,它会以某个字符串结束其日志文件。 EX:

“INFO:安全套接字侦听器在端口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:在端口9556上启动的安全套接字侦听器'在日志中带有时间戳。

无论如何我可以添加时间戳作为外卡入口吗?

1 个答案:

答案 0 :(得分:1)

你的第二个过程应该遵循第一个过程。

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

read命令等待startNodemanager.log包含以INFO: Secure socket listener started on port 9556结尾的行。

read还接受-t timeout标记,如果超出超时,则会退出并设置$?大于128。如果它成功,read将返回0.