2014-05-01 42 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

    相關問題