2014-05-01 43 views
0

即时编写更多bash备份脚本,但有一点问题。bash脚本每天运行但不是每个月的第一个

在每个月的第一天我运行server1.sh来做一个完整的备份。 我每隔一天运行一次server2.sh,查看server1备份并根据此完整备份执行增量备份。

多数民众赞成在所有伟大的。

我的第一个问题是我如何告诉server2.sh不在每个月的第一天运行,因为server1.sh将在今天运行。

使用crontab运行这些脚本。

例如cron的

  • 0 1 * * server1.sh
  • 2 * * * server2.sh

到目前为止,我已经使用,但如果它没有完全工作还没有这个脚本

#!/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 [email protected]:/data/backup/"$j"  /home/backup/website/$f_date --bwlimit=10000 --log-file=/logs/rsync_"$j"_"$r_date".log 

fi 
done 
+1

如果您颠倒“fi”和“done”线,它可能会更好一点。 –

+0

布鲁斯。那工作的一种享受感谢 – Kevin

回答

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表达式:0 0 2-31 * *

  • 的运行server1.sh个月的只有第一天:

    • 除了每月的第一天运行server2.sh所有天:0 0 1 * *

    你必须定义分钟a在运行脚本的小时。所以用你自己的价值取代前两个0 0。例如:

    20 3 2-31 * * 
    20 3 1 * * 
    

    要在3.20 AM运行您的脚本。

    希望得到这个帮助!

  • +0

    我忘了所有关于日期范围的cron。谢谢,这将工作得很好 – Kevin

    +0

    @凯文,欢迎您! – gipinani

    相关问题