gpt4 book ai didi

linux - 如果程序在 shell 脚本中输出特殊字符串,则执行命令

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:10 25 4
gpt4 key购买 nike

我正在使用一个备份脚本,该脚本使用 rsync 创建我的数据备份,对其进行加密并将其上传到云端。该脚本在一个隔离的 docker 容器中运行,该容器只能访问它应该备份的数据(它不能与主机通信)。

由于备份数据的服务在备份的时候可能没有运行,所以我目前是这样执行备份任务(简化版)

#!/bin/bash
/etc/init.d/myservice stop
# the scripts blocks until the backup job is done
/opt/backup_data >> /var/log/backup.log
/etc/init.d/myservice start

备份服务的输出看起来像

backup started at 15-02-09 22:00:01
rsync started
/foo/bar
deleted /baz
[...]
rsync completed
starting upload
upload completed
backup completed

虽然这可行,但我更愿意在 rsync 操作完成后立即重新启动我的服务,以尽可能缩短停机时间。但是我只有日志的内容,怎么实现呢?

TL;DR 我运行一个命令,将一些文本输出到标准输出,我将其重定向到文件。我想强制执行另一个命令,只要第一个命令的标准输出包含特殊字符串。如果没有(例如,当出现问题时),我无论如何都想执行它 - 但只执行一次。

最佳答案

由于 docker 容器的主机可以看到日志文件,我会使用 tail -f 来“跟随”日志文件和管道它的输出到 awk。当 awk看到rsync 作业完成时,它可以重新启动服务:

tail -f backup.log | awk '/^rsync complete/ {system("/etc/init.d/myservice start")}'

关于linux - 如果程序在 shell 脚本中输出特殊字符串,则执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28420166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com