AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 791810
Accepted
TCB13
TCB13
Asked: 2016-07-26 06:06:33 +0800 CST2016-07-26 06:06:33 +0800 CST 2016-07-26 06:06:33 +0800 CST

交互式应用程序:确保每 30 分钟找到一次特定的输出

  • 772

因此,由于一些非常糟糕的设计选择,我被一个复杂且不可替代的交互式控制台应用程序所困扰,该应用程序永远在 Debian 机器上运行。

这个应用程序重复执行一些任务,并返回stdout如下结果:

InvetoryOpt: Finished
PBridged: Finished
FLoot: ERROR

我需要确保每 x 分钟我都会InvetoryOpt: Finished在程序的输出中得到字符串。如果不是我需要杀死它,运行其他脚本,再次启动程序并检查。

我怎样才能做到这一点?我正在考虑,expect但我没有太多经验,我不确定我是否能够每 x 分钟检查一次输出是否与字符串匹配。

笔记:

  • 该程序还输出了许多我不关心的其他垃圾;
  • 该程序可以InvetoryOpt: Finished在 30 分钟内多次输出相同的字符串,或者根本不输出任何内容。所以拖尾文件的末尾不会这样做,因为它会匹配该字符串的最后一个输出。

谢谢你。

bash command-line-interface
  • 1 1 个回答
  • 34 Views

1 个回答

  • Voted
  1. Best Answer
    user335605
    2016-07-26T17:09:38+08:002016-07-26T17:09:38+08:00

    您可以使用下面的脚本作为包装控制器。我假设 bash 是已知的,所以没有技术评论。如果你想要它们,我可以添加它们。

    您提到的脚本的变量 PROGRAM 和 OTHER_SCRIPT 需要定义。

    时间控制是刚性的,即。它不会将倒计时重置为最后InvetoryOpt: Finished一条消息时间,只是每 30 分钟检查一次。如果你需要的话,我可以想办法改进它。

    更新:添加了陷阱。

    #!/usr/bin/env bash
    
    trap '
    kill %1
    rm $OUT
    exit
    ' 2
    
    #provide the program command below
    PROGRAM=
    #provide the other script below
    OTHER_SCRIPT=
    PHRASE="InvetoryOpt: Finished"
    INTERVAL=1800
    OUT=/tmp/out$$
    
    message () {
        echo "$(basename "$0")": "$1"
    }
    
    start_app () {
        eval "$PROGRAM | tee $OUT &"
    }
    
    action () {
        if ! grep -q -e "$PHRASE" $OUT
        then
            message "Check failed. Restarting." >&2
            kill %1
            eval "$OTHER_SCRIPT"
            start_app
        else
            message "All fine."
        fi
        > $OUT
    }
    
    start_app
    while true
        do {
            sleep $INTERVAL
            action
        }
        done
    
    • 1

相关问题

  • Mac OS X:从 python 脚本中更改 $PATH

  • Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

  • crontab ifconfig 什么都不输出

  • 使用命令行工具按排序顺序计算重复项

  • 是否有 bash 等效于 ruby​​ 的“一些内容#{foo}”?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve