我想script.sh
每分钟运行一个命令/shell 脚本,比如从凌晨 1 点到凌晨 2 点。在观察到 crontab 无法以“每秒”计算后,我不得不使用“每分钟”。
基本上,我的server.sh
文件占用backup
了我的database
服务器。这是通过三个带有名称的文本文件完成的tables
,因此创建了三个备份archives
。这些备份档案的命名方式为“prefixYYYYmmdd”,其中前缀 = heavy/light/weekly,具体取决于备份类型。
现在我想复制这些特定文件,前提是它们已存储在服务器上。假设服务器上的备份需要 15 分钟。现在我应该在本地计算机上运行该copy
脚本。由于此脚本不知道服务器刚刚创建的文件的名称,因此它应该在服务器创建这些文件的时间间隔内每秒/分钟运行一次并抓取该文件。client.sh
copy
如何在该时间间隔内每分钟/秒使用 crontab?
答案1
您可以使用多种方法。
- 让脚本循环 3600 次,中间有一个 sleep 1(= 1 小时),在您方便的时候使用 cron 启动它。
- 让脚本根据日期智能地查找文件,然后在合适的时间(例如凌晨 4 点)进行复制
- 获取脚本,根据日期和其他相关信息监控文件的制作时间。文件准备好后立即进行复制。
请注意,“...复制脚本不知道刚刚创建的文件的名称...”只是意味着脚本还没有代码。您说文件有当前日期,只需使用该日期即可。例如:
#!/bin/bash
FILE=$(date +"prefix%Y%m%d")
echo "The filename for today is "$FILE
答案2
答案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 点,它将自动退出。
希望这可以帮助