安排命令运行的最佳方法是什么,确保之前的一组命令已完成?

use*_*569 2 linux backup incremental-backup

即,我需要轮换备份文件夹。我有许多机器按计划将 rsync 同步到单个备份机器。尽管我安排在深夜开始备份,并在第二天早上晚些时候安排文件夹轮换(使文件夹 day0 变为 day1,从最旧的开始)(例如,提供 10 个小时来完成备份) ,我希望能够在允许轮换开始之前确保所有备份都已完成,而不是做出假设(因为,如果我在备份进行时轮换文件夹,我的备份将不准确)。

这对于一台机器来说是微不足道的,但对于几台机器来说,我希望有人知道最好的方法......我可以想到一些但宁愿不必在运行系统上“实验”:

让每个备份创建一个完成标记,并在特定时间后每隔几分钟运行一次轮换脚本,检查它是否还没有成功运行,并且所有标记都是最新的(比上次旋转脚本标记旧)?

让每个备份 mv 之前的 rsync 到一个正在进行的文件夹,rsync,然后 mv 回到 day0,这样如果没有完成,轮换就跳过那个备份?

只是忍受可能不准确的备份?

ada*_*ptr 5

我可能会向中央服务器写入一个包含日期和主机名的完成文件;你可以用这个:

#!/bin/bash
# when each backup completes, write a completion file:
ssh user@central-server "touch /path/to/completion-files/$HOST-$(date +%F).complete"
Run Code Online (Sandbox Code Playgroud)

在中央服务器上:

#!/bin/bash
# on the central server, run this before attempting folder rotation
for h in (list of hosts); do
  if [[ -e "/path/to/completion-files/$h-$(date +%F)" ]]; 
    then # do your thing
  fi
done
Run Code Online (Sandbox Code Playgroud)