如何在每分钟/秒的时间内运行命令?

如何在每分钟/秒的时间内运行命令?

我想script.sh每分钟运行一个命令/shell 脚本,比如从凌晨 1 点到凌晨 2 点。在观察到 crontab 无法以“每秒”计算后,我不得不使用“每分钟”。

基本上,我的server.sh文件占用backup了我的database服务器。这是通过三个带有名称的文本文件完成的tables,因此创建了三个备份archives。这些备份档案的命名方式为“prefixYYYYmmdd”,其中前缀 = heavy/light/weekly,具体取决于备份类型。

现在我想复制这些特定文件,前提是它们已存储在服务器上。假设服务器上的备份需要 15 分钟。现在我应该在本地计算机上运行该copy脚本。由于此脚本不知道服务器刚刚创建的文件的名称,因此它应该在服务器创建这些文件的时间间隔内每秒/分钟运行一次并抓取该文件。client.shcopy

如何在该时间间隔内每分钟/秒使用 crontab?

答案1

您可以使用多种方法。

  1. 让脚本循环 3600 次,中间有一个 sleep 1(= 1 小时),在您方便的时候使用 cron 启动它。
  2. 让脚本根据日期智能地查找文件,然后在合适的时间(例如凌晨 4 点)进行复制
  3. 获取脚本,根据日期和其他相关信息监控文件的制作时间。文件准备好后立即进行复制。

请注意,“...复制脚本不知道刚刚创建的文件的名称...”只是意味着脚本还没有代码。您说文件有当前日期,只需使用该日期即可。例如:

#!/bin/bash
FILE=$(date +"prefix%Y%m%d")
echo "The filename for today is "$FILE

答案2

我会用rsync它做这样的工作。甚至现成的 解决方案在那里。甚至时光倒流,据我所知通常用作客户端到本地磁盘备份,如果您可以通过 nfs/smb/... 挂载备份目标,则适合您的情况。

一开始采用临时解决方案是可以的,但需求不可避免地会发生变化——而临时解决方案很少能够优雅地适应。

答案3

首先创建一个将于凌晨 1 点启动的 cron 任务

 1 * * * /path_to_script/script.sh

在script.sh中

#!/bin/bash
while true
do
find dir -mtime -1 -exec cp {} directory \;
TEST=`echo $(date +%H)`
if [ $TEST > 2 ]
then
  exit 0
fi

sleep 1
done

根据需要修改 find 命令(要查找最近修改的文件,请使用 mtime,如果要从远程计算机返回,请使用 rsync,如果从本地计算机返回,则只需 cp/mv)

该脚本将检查date,如果超过凌晨 2 点,它将自动退出。

希望这可以帮助

相关内容