centos7下rsync+crontab按期同步備份

最近需求想按期備分內部重要的服務器數據到存儲裏面,順便作個筆記linux

之前整過一個win下的cwrsync(客戶端)+rsync(服務端:存儲)的bat腳本git

此次整一個Linux下的腳本sh,執行按期自動備份數據算法

 

 

客戶端:192.168.0.100(rsync-Linux)shell

服務端:192.168.0.252(存儲)vim

rsync簡介:windows

rsync是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync能夠遠程同步,支持本地複製,或者與其餘SSH、rsync主機同步。緩存

 

1.服務端配置:安全

rsync的服務端主要是羣輝的存儲,因此直接有界面式的配置,因此這邊就不詳細講解,以下圖:bash

 

2.客戶端配置:服務器

建立密碼文件,/etc/rsyncd/rsyncd.pass,並修改成 600 權限

[root@localhost ~]# mkdir rsyncd
[root@localhost ~]# vim /rsyncd/rsyncd.pass
[root@localhost ~]# chmod 600 /rsyncd/rsyncd.pass
▲說明:/rsyncd/rsyncd.pass其內密碼須要和服務端內/etc/rsyncd/rsyncd.pass或存儲rsync指定用戶的密碼保持一致

客戶端向服務端傳輸文件,若是是 873 端口,能夠把 --port 去掉

rsync -arvz --progress /data rsync@192.168.0.252::log --password-file=/rsyncd/rsyncd.pass

如有須要也能夠從服務端拉取文件,須要把服務器的 /etc/rsyncd/rsyncd.conf 中的 write only = yes 給去掉

#拉取整個目錄
rsync -arvz  --progress  --password-file=/rsyncd/rsyncd.pass --port=873 rsync@192.168.0.252::log  /var/log

#拉取單個文件
rsync -arvz  --progress  --password-file=/rsyncd/rsyncd.pass --port=873 rsync@192.168.0.252::log/a.log  /var/log

 

rsync服務端配置參數:

全局參數 在文件中[module]以前的全部參數都是全局參數,固然也能夠在全局參數部分定義模塊參數,這時候該參數的值就是全部模塊的默認值。 port 指定後臺程序使用的端口號,默認爲873。 motd file
"motd file"參數用來指定一個消息文件,當客戶鏈接服務器時該文件的內容顯示給客戶,默認是沒有motd文件的。 log file
"log file"指定rsync的日誌文件,而不將日誌發送給syslog。好比可指定爲「/var/log/rsyncd.log」。 pid file 指定rsync的pid文件,一般指定爲「/var/run/rsyncd.pid」。 syslog facility 指定rsync發送日誌消息給syslog時的消息級別,常見的消息級別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默認值是daemon。 模塊參數 主要是定義服務器哪一個目錄要被同步。其格式必須爲「[module]」形式,這個名字就是在rsync 客戶端看到的名字,其實有點象Samba服務器提供的共享名。而服務器真正同步的數據是經過 path 來指定的。咱們能夠根據本身的須要,來指定多個模塊,模塊中能夠定義如下參數: comment 給模塊指定一個描述,該描述連同模塊名在客戶鏈接獲得模塊列表時顯示給客戶。默認沒有描述定義。 path 指定該模塊的供備份的目錄樹路徑,該參數是必須指定的。 use chroot 如 果"use chroot"指定爲true,那麼rsync在傳輸文件之前首先chroot到path參數所指定的目錄下。這樣作的緣由是實現額外的安全防禦,可是缺 點是須要以roots權限,而且不能備份指向外部的符號鏈接所指向的目錄文件。默認狀況下chroot值爲true。 uid 該選項指定當該模塊傳輸文件時守護進程應該具備的uid,配合gid選項使用能夠肯定哪些能夠訪問怎麼樣的文件權限,默認值是"nobody"。 gid 該選項指定當該模塊傳輸文件時守護進程應該具備的gid。默認值爲"nobody"。 max connections 指定該模塊的最大併發鏈接數量以保護服務器,超過限制的鏈接請求將被告知隨後再試。默認值是0,也就是沒有限制。 list 該選項設定當客戶請求可使用的模塊列表時,該模塊是否應該被列出。若是設置該選項爲false,能夠建立隱藏的模塊。默認值是true。 read only 該選項設定是否容許客戶上載文件。若是爲true那麼任何上載請求都會失敗,若是爲false而且服務器目錄讀寫權限容許那麼上載是容許的。默認值爲true。 exclude 用來指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到exclude列表中。這等同於在客戶端命令中使用--exclude來指定模式,一個 模塊只能指定一個exclude選項。可是須要注意的一點是該選項有必定的安全性問題,客戶頗有可能繞過exclude列表,若是但願確保特定的文件不能 被訪問,那就最好結合uid/gid選項一塊兒使用。 exclude from 指定一個包含exclude模式的定義的文件名,服務器從該文件中讀取exclude列表定義。 include 用來指定不排除符合要求的文件或目錄。這等同於在客戶端命令中使用--include來指定模式,結合include和exclude能夠定義複雜的exclude/include規則。 include from 指定一個包含include模式的定義的文件名,服務器從該文件中讀取include列表定義。 auth users 該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才容許鏈接該模塊。這裏的用戶和系統用戶沒有任何關係。若是"auth users"被設置,那麼客戶端發出對該模塊的鏈接請求之後會被rsync請求challenged進行驗證身份這裏使用的 challenge/response認證協議。用戶的名和密碼以明文方式存放在"secrets file"選項指定的文件中。默認狀況下無需密碼就能夠鏈接模塊(也就是匿名方式)。 secrets file 該選項指定一個包含定義用戶名:密碼對的文件。只有在"auth users"被定義時,該文件纔有做用。文件每行包含一個username:passwd對。通常來講密碼最好不要超過8個字符。沒有默認的 secures file名,須要限式指定一個(例如:/etc/rsyncd.passwd)。注意:該文件的權限必定要是600,不然客戶端將不能鏈接服務器。 strict modes 該選項指定是否監測密碼文件的權限,若是該選項值爲true那麼密碼文件只能被rsync服務器運行身份的用戶訪問,其餘任何用戶不能夠訪問該文件。默認值爲true。 hosts allow 該選項指定哪些IP的客戶容許鏈接該模塊。客戶模式定義能夠是如下形式: 單個IP地址,例如:192.167.0.1 整個網段,例如:192.168.0.0/24,也能夠是192.168.0.0/255.255.255.0 多個IP或網段須要用空格隔開,「*」則表示全部,默認是容許全部主機鏈接。 hosts deny 指定不容許鏈接rsync服務器的機器,可使用hosts allow的定義方式來進行定義。默認是沒有hosts deny定義。 ignore errors 指定rsyncd在判斷是否運行傳輸時的刪除操做時忽略server上的IO錯誤,通常來講rsync在出現IO錯誤時將將跳過--delete操做,以防止由於暫時的資源不足或其它IO錯誤致使的嚴重問題。 ignore nonreadable 指定rysnc服務器徹底忽略那些用戶沒有訪問權限的文件。這對於在須要備份的目錄中有些文件是不該該被備份者獲得的狀況是有意義的。 lock file 指定支持max connections參數的鎖文件,默認值是/var/run/rsyncd.lock。 transfer logging 使rsync服務器使用ftp格式的文件來記錄下載和上載操做在本身單獨的日誌中。 log format 經過該選項用戶在使用transfer logging能夠本身定製日誌文件的字段。其格式是一個包含格式定義符的字符串,可使用的格式定義符以下所示: %h 遠程主機名 %a 遠程IP地址 %l 文件長度字符數 %p 該次rsync會話的進程id %o 操做類型:"send""recv"
%f 文件名 %P 模塊路徑 %m 模塊名 %t 當前時間 %u 認證的用戶名(匿名時是null) %b 實際傳輸的字節數 %c 當發送文件時,該字段記錄該文件的校驗碼 默認log格式爲:"%o %h [%a] %m (%u) %f %l",通常來講,在每行的頭上會添加"%t [%p] "。在源代碼中同時發佈有一個叫rsyncstats的perl腳本程序來統計這種格式的日誌文件。 timeout 經過該選項能夠覆蓋客戶指定的IP超時時間。經過該選項能夠確保rsync服務器不會永遠等待一個崩潰的客戶端。超時單位爲秒鐘,0表示沒有超時定義,這也是默認值。對於匿名rsync服務器來講,一個理想的數字是600。 refuse options 經過該選項能夠定義一些不容許客戶對該模塊使用的命令參數列表。這裏必須使用命令全名,而不能是簡稱。但發生拒絕某個命令的狀況時服務器將報告錯誤信息而後退出。若是要防止使用壓縮,應該是:"dont compress = *"。 dont compress 用來指定那些不進行壓縮處理再傳輸的文件,默認值是*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

rsync經常使用命令:

-v, --verbose 詳細模式輸出 -q, --quiet 精簡輸出模式 -c, --checksum 打開校驗開關,強制對文件傳輸進行校驗 -a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等於-rlptgoD -r, --recursive 對子目錄以遞歸模式處理 -R, --relative 使用相對路徑信息 -b, --backup 建立備份,也就是對於目的已經存在有一樣的文件名時,將老的文件從新命名爲~filename。可使用--suffix選項來指定不一樣的備份文件前綴。 --backup-dir 將備份文件(如~filename)存放在在目錄下。 -suffix=SUFFIX 定義備份文件前綴 -u, --update 僅僅進行更新,也就是跳過全部已經存在於DST,而且文件時間晚於要備份的文件。(不覆蓋更新的文件) -l, --links 保留軟鏈結 -L, --copy-links 想對待常規文件同樣處理軟鏈結 --copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹之外的鏈結 --safe-links 忽略指向SRC路徑目錄樹之外的鏈結 -H, --hard-links 保留硬鏈結 -p, --perms 保持文件權限 -o, --owner 保持文件屬主信息 -g, --group 保持文件屬組信息 -D, --devices 保持設備文件信息 -t, --times 保持文件時間信息 -S, --sparse 對稀疏文件進行特殊處理以節省DST的空間 -n, --dry-run現實哪些文件將被傳輸 -W, --whole-file 拷貝文件,不進行增量檢測 -x, --one-file-system 不要跨越文件系統邊界 -B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節 -e, --rsh=COMMAND 指定使用rsh、ssh方式進行數據同步 --rsync-path=PATH 指定遠程服務器上的rsync命令所在路徑信息 -C, --cvs-exclude 使用和CVS同樣的方法自動忽略文件,用來排除那些不但願傳輸的文件 --existing 僅僅更新那些已經存在於DST的文件,而不備份那些新建立的文件 --delete 刪除那些DST中SRC沒有的文件 --delete-excluded 一樣刪除接收端那些被該選項指定排除的文件 --delete-after 傳輸結束之後再刪除 --ignore-errors 及時出現IO錯誤也進行刪除 --max-delete=NUM 最多刪除NUM個文件 --partial 保留那些因故沒有徹底傳輸的文件,以是加快隨後的再次傳輸 --force 強制刪除目錄,即便不爲空 --numeric-ids 不將數字的用戶和組ID匹配爲用戶名和組名 --timeout=TIME IP超時時間,單位爲秒 -I, --ignore-times 不跳過那些有一樣的時間和長度的文件 --size-only 當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間 --modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認爲0 -T --temp-dir=DIR 在DIR中建立臨時文件 --compare-dest=DIR 一樣比較DIR中的文件來決定是否須要備份 -P 等同於 --partial --progress 顯示備份過程 -z, --compress 對備份的文件在傳輸時進行壓縮處理 --exclude=PATTERN 指定排除不須要傳輸的文件模式 --include=PATTERN 指定不排除而須要傳輸的文件模式 --exclude-from=FILE 排除FILE中指定模式的文件 --include-from=FILE 不排除FILE指定模式匹配的文件 --version 打印版本信息 --address 綁定到特定的地址 --config=FILE 指定其餘的配置文件,不使用默認的rsyncd.conf文件 --port=PORT 指定其餘的rsync服務端口 --blocking-io 對遠程shell使用阻塞IO -stats 給出某些文件的傳輸狀態 --progress 在傳輸時現實傳輸過程 --log-format=formAT 指定日誌文件格式 --password-file=FILE 從FILE中獲得密碼 --bwlimit=KBPS 限制I/O帶寬,KBytes per second -h, --help 顯示幫助信息

 

crontab簡介:

crond是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務相似,當安裝完成操做系統後,默認會安裝此服務工具,而且會自動啓動crond進程,crond進程每分鐘會按期檢查是否有要執行的任務,若是有要執行的任務,則自動執行該任務。

Linux下的任務調度分爲兩類:系統任務調度和用戶任務調度。

系統任務調度:系統週期性所要執行的工做,好比寫緩存數據到硬盤、日誌清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。

/etc/crontab文件包括下面幾行:

[root@localhost ~]# cat /etc/crontab 

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=""HOME=/


# run-parts

51 * * * * root run-parts /etc/cron.hourly

24 7 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

前四行是用來配置crond任務運行的環境變量,第一行SHELL變量指定了系統要使用哪一個shell,這裏是bash,第二行PATH變量指定了系統執行命令的路徑,第三行MAILTO變量指定了crond的任務執行信息將經過電子郵件發送給root用戶,若是MAILTO變量的值爲空,則表示不發送任務執行信息給用戶,第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄。

用戶任務調度:用戶按期要執行的工做,好比用戶數據備份、定時郵件提醒等。用戶可使用 crontab 工具來定製本身的計劃任務。全部用戶定義的crontab 文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致。

crontab文件的含義:

用戶所創建的crontab文件中,每一行都表明一項任務,每行的每一個字段表明一項設置,它的格式共分爲六個字段,前五段是時間設定段,第六段是要執行的命令段,格式以下:

minute   hour   day   month   week   command

其中:

minute: 表示分鐘,能夠是從0到59之間的任何整數。

hour:表示小時,能夠是從0到23之間的任何整數。

day:表示日期,能夠是從1到31之間的任何整數。

month:表示月份,能夠是從1到12之間的任何整數。

week:表示星期幾,能夠是從0到7之間的任何整數,這裏的0或7表明星期日。

command:要執行的命令,能夠是系統命令,也能夠是本身編寫的腳本文件。

在以上各個字段中,還可使用如下特殊字符:

星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。

逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」

中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」

正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。

crontab經常使用命令:

1.列出crontab文件

   爲了列出crontab文件,能夠用:

 [root@localhost ~]# crontab -l

 0,15,30,45,18-06 * * * /bin/echo `date` > dev/tty1

你將會看到和上面相似的內容。可使用這種方法在$HOME目錄中對crontab文件作一備份:

  [root@localhost ~]# crontab -l > $HOME/mycron

    這樣,一旦不當心誤刪了crontab文件,能夠用上一節所講述的方法迅速恢復。

2.編輯crontab文件

 若是但願添加、刪除或編輯crontab文件中的條目,而編輯環境變量又設置爲v i,那麼就能夠用vi來編輯crontab文件,相應的命令爲:

[root@localhost ~]# crontab -e

能夠像使用vi編輯其餘任何文件那樣修改crontab文件並退出。若是修改了某些條目或添加了新的條目,那麼在保存該文件時, c r o n會對其進行必要的完整性檢查。若是其中的某個域出現了超出容許範圍的值,它會提示你。

咱們在編輯crontab文件時,沒準會加入新的條目。例如,加入下面的一條:

# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month(註釋說明)

  30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

如今保存並退出。最好在crontab文件的每個條目之上加入一條註釋,這樣就能夠知道它的功能、運行時間,更爲重要的是,知道這是哪位用戶的做業。

如今讓咱們使用前面講過的crontab -l命令列出它的所有信息:

[root@localhost ~]# crontab -l 
    # (crondave installed on Tue May 4 13:07:43 1999)

    # DT:ech the date to the console every 30 minites

   0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1

    # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month

    30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

3.刪除crontab文件

要刪除crontab文件,能夠用:

 [root@localhost ~]# crontab -r

crontab使用實例

實例1:每1分鐘執行一次command

命令:

* * * * * command

實例2:每星期日的晚上00 : 00執行rsync-sh腳本

命令:

[root@localhost ~]# crontab -e

# DT:Execute rsync-sh script every Sunday at 00: 00(註釋說明)

0 0 * * 7 sh /root/rsyncd/rsync-gitbak.sh

rsync客戶端自動與rsync服務器端同步:
首先,咱們來作一個shell腳本

[root@localhost rsyncd]# vim rsyncd.sh

#!/bin/bash

rsync -arvz --progress /data rsync@192.168.0.252::log --password-file=/rsyncd/rsyncd.pass

命令:crontab -e來編輯加入計劃任務

[root@localhost ~]# crontab -e
# DT:Execute rsync-sh script every Sunday at 00: 00(註釋說明) 0 0 * * 7 sh /root/rsyncd/rsyncd.sh

使用crontab -l查看加入的計劃任務

[root@localhost ~]# crontab -l
0 0 * * 7 sh /root/rsyncd/rsyncd.sh
注意:
 
1. 當程式在你所指定的時間執行後,系統會寄一封信給你,顯示該程式執行的內容,如果你不但願收到這樣的信,請在每一行空一格以後加上 > /dev/null 2>&1 便可。
 
2. %在crontab中被認爲是newline,要用\來escape才行。好比crontab執行行中,若是有"date +%Y%m%d",必須替換爲:"date +\%Y\%m\%d"
 

遇到的問題和解決方法:

在Windows上面編輯了sh腳本上傳到Linux上面,執行報錯:

bad interpreter:No such file or directory

vim rsyncd.sh用命令:set ff?查看是doc仍是unix格式,若是是dos格式,用命令:set ff=unix轉化爲unix格式

相關文章
相關標籤/搜索