【问题标题】:Stopping a task in shell script if logs contain specific string如果日志包含特定字符串,则在 shell 脚本中停止任务
【发布时间】:2021-11-27 01:45:29
【问题描述】:

我正在尝试在 shell 脚本中运行一个命令,如果处理日志(不确定任务运行时终端上输出的日志是什么)包含字符串“INFO | 下一个会话”,我想退出它将从“开始”

我尝试使用 grep,但由于字符串“INFO | Next session will start at”不在标准输出中,因此在命令运行时无法检测到。

我正在运行的具体命令如下

pipenv run python3 run.py --config accounts/user/config.yml

“处理日志”是指终端中显示标准输出之前的日志输出。

...
[D 211127 10:07:12 init:400] atx-agent version 0.10.0
[D 211127 10:07:12 init:403] device wlan ip: route ip+net: no such network interface
[11/27 10:07:12]     INFO | Time delta has set to 00:11:51.
[11/27 10:07:13]     INFO | Kill atx agent.
[11/27 09:59:32]     INFO | Next session will start at: 10:28:30 (2021/11/27).
[11/27 09:59:32]     INFO | Time left: 00:28:57.

我正在尝试这样做,因为我尝试运行的 yml 文件对您可以执行它的时间有限制,如果时间不满足,我想退出任务。

我试图提供尽可能多的背景信息,但如果缺少某些内容,请告诉我。

【问题讨论】:

  • 具体是什么版本的 bash?或者您是否严格要求在 bash 和 zsh 中都可以使用的答案(这大大限制了可以使用的功能)?
  • 抱歉只使用 zsh。并且版本是zsh 5.8 (x86_64-apple-darwin18.7.0)
  • 如果您不接受仅限 bash 的答案,请取出 bash 标签。 bash 和 zsh 是两个不同的 shell,它们在很大程度上是不兼容的。
  • (顺便说一句,我不知道 zsh 相当于 bash 协进程是什么,但它是一个可以查看的地方。如果 zsh 允许您获取进程替换的 PID,那么您就可以杀死阅读后在其中编写程序,这是另一种通用方法;但我只知道 bash 的详细信息。
  • 输出到stdout还是stderr?

标签: shell zsh stdout


【解决方案1】:

这可能有效:

pipenv run python3 run.py --config accounts/user/config.yml |
sed "/INFO | Next session will start at/q"

sed 打印管道输入,直到它匹配表达式并退出 (q)。当程序尝试继续写入并(可能)退出时,它会收到 SIGPIPE(损坏的管道)。这与您执行find | head 之类的操作时发生的情况相同。

您也可以在 shell 包装器中使用 kill

sh -c 'pipenv run python3 run.py --config accounts/user/config.yml |
{ sed "/INFO | Next session will start at/q"; kill -- -$$; }'

注意事项:

  • 如果 stdout 不是终端,程序可能会打印不同的日志。
  • 如果要匹配文字字符串,可以使用grep -Fm 1 PATTERN,但其他日志输出将被隐藏。如果不匹配,grep 将失败,这很有用。
  • 这适用于任何 shell,包括zsh。 zsh 或 bash 也可用于 kill 包装器。
  • 还有其他方法。此线程专注于tail,但也是一个有用的参考:https://superuser.com/questions/270529/monitoring-a-file-until-a-string-is-found

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多