我正在编写更多bash备份脚本,但有一点问题。
每月1日我运行server1.sh进行完整备份。 每隔一天我运行server2.sh,查看server1备份并根据此完整备份执行增量备份。
这一切都很棒。
我的第一个问题是如何告诉server2.sh不要在每个月的第一天运行,因为server1.sh将在今天运行。
使用crontab运行这些脚本。
示例cron
到目前为止,我的脚本使用了if但尚未完全正常工作
#!/bin/bash
LinkDest=/home/backup/website/full
r_date=$(date "+%d-%m-%y")
f_date=$(date +%F)
c_date=$(date +%d)
servers=("123.123.78.90" "123.123.78.91" "123.123.78.92" "123.123.78.93" "123.123.78.94" "123.123.78.95" "cluster")
if [ $c_date -eq 01 ]
then
echo "Backup Skipped 1st of Month"
exit 0
else
for j in "${servers[@]}"
do
echo "server:/data/backup/$j /home/backup/website/$j"
rsync -avz --link-dest=$LinkDest root@123.123.78.90:/data/backup/"$j" /home/backup/website/$f_date --bwlimit=10000 --log-file=/logs/rsync_"$j"_"$r_date".log
fi
done
答案 0 :(得分:2)
这是cron表达式的格式:
# Minute Hour Day of Month Month Day of Week Command
# (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat)
0 2 12 * * /usr/bin/find
鉴于您的问题,您可以使用以下cron表达式:
除了server2.sh
0 0 2-31 * *
仅限运行server1.sh
的第一天:0 0 1 * *
您必须定义运行脚本的分钟和小时。所以用自己的值替换前两个0 0。例如:
20 3 2-31 * *
20 3 1 * *
在凌晨3点20分运行脚本。
希望这有帮助!