我使用的是备份脚本,它使用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我运行一个命令,将一些文本输出到stdout,我将其重定向到文件。我想强制执行另一个命令,只要第一个的stdout包含一个特殊的字符串。如果它没有(例如,当出现问题时),我想要执行它 - 但只需要执行一次。
答案 0 :(得分:1)
由于docker容器的主机可以查看日志文件,我会使用tail -f
“关注”日志文件并将其输出传递给{{ 1}}。当awk
“看到”awk
作业完成后,它可以重新启动服务:
rsync