rdiff-backup備份

目錄

1. 服務器備份知識點

1.1?備份策略

1.2 備份步驟和寶塔面板簡介

1.3 CentOS7重要目錄

2. 備份工具

2.1?tar -g

備份演示

2. rsync

備份演示

3. rdiff-backup

備份演示

4. 差異和優缺點

3. rdiff-backup安裝和使用

3.1 備份命令rdiff-backup

3.2 恢復命令--restore-as-of

3.3 刪除命令--remove-older-than

3.4 備份目錄選擇

3.5 手動備份home目錄演示

第一次備份

第二次備份

第三次備份

恢復到第二次備份數據

3.6 自動化備份腳本

第一次備份

第二次備份

測試多目錄備份腳本

測試Linux定時任務

1. 寶塔面板

backEnd2

2. Linux定時任務命令

2.1 系統配置文件

2.2 用戶的配置文件

3 crontab?-e

3.1 定時測試:

3.2 每分鐘測試

3.3 定時任務注意事項

3.4 實際測試

3.5 測試睡眠時產生多個文件

3.6 最終備份腳本

監控Linux目錄差異

最終測試

最終監控腳本

本篇完。


1. 服務器備份知識點

1.1?備份策略

  • 3份備份 除了原有的數據備份副本之外,應該始終保證有兩個額外的備份副本或版本。假設一份備份被損壞的的機率為1/100,那么三份備份遭到損壞的機率便僅為1/1000000,意味著在原本的備份基礎上多添加兩份保障。
  • 2種介質至少在兩種不同的存儲介質上存儲數據副本,包括內部驅動器,以及外部媒介,如磁盤、磁帶、閃存、網絡存儲或云存儲等。將備份存放在不同的介質中,為的就是降低單一介質遭遇損壞的風險。
  • 1份異地將至少一份備份數據存儲在異地作為異地副本,備份數據之間的隔離十分重要,將外部存儲設備與生產存儲設備存放在同一空間的行為并不明智,一旦遭遇洪水火災等自然災害時,數據就可能會有”團滅”的危機。

Linux備份通常可以分為以下幾個層次,這些層次主要基于備份的廣度和深度來劃分:

  1. 完全備份(Full Backup)
    • 完全備份是指將所有需要備份的數據全部進行備份。這種備份方式會備份整塊硬盤、整個分區或某個具體的目錄中的所有數據。
    • 完全備份的優點是恢復時簡單快捷,因為所有需要的數據都已經包含在備份文件中。
    • 缺點是備份所需的時間和存儲空間較大,特別是當數據量很大時。
  2. 增量備份(Incremental Backup)
    • 增量備份是在完全備份的基礎上,只備份自上一次備份(無論是完全備份還是增量備份)以來發生了更改的數據。
    • 增量備份的優點是備份所需的時間和存儲空間較小,因為它只備份新增或修改的數據。
    • 缺點是恢復時可能需要多個備份文件(包括完全備份和多個增量備份),恢復過程相對復雜。
  3. 差異備份(Differential Backup)
    • 差異備份與增量備份類似,但它是基于上一次完全備份來備份之后所有發生更改的數據。即每次差異備份都會備份自上一次完全備份以來所有新增或修改的數據。
    • 差異備份的優點是恢復時相對增量備份簡單,因為它只需要一個完全備份和一個最新的差異備份文件。
    • 缺點是隨著時間的推移,差異備份文件可能會變得很大,因為它包含了自上次完全備份以來的所有更改。

????????對于數據變化不大的系統,可以選擇完全備份和定期的差異備份;而對于數據變化頻繁的系統,則可以選擇完全備份和頻繁的增量備份。

????????普通的備份策略比如:(一周一次全量備份,一天一次增量備份,全量備份可以用寶塔定時備份保存三份文件,自己備份也可以。)


1.2 備份步驟和寶塔面板簡介

一般備份步驟:

1. 數據識別與分類

  • 識別重要數據:首先,需要明確哪些數據是業務關鍵或法律要求必須保留的。
  • 數據分類:根據數據的敏感性、重要性和恢復時間目標(RTO)進行分類,以便制定合適的備份策略。

2. 備份策略制定

  • 全備份與增量/差異備份:定期執行全備份,并在全備份之間執行增量或差異備份以減少存儲需求和備份時間。
  • 備份頻率:根據數據變化頻率和業務需求確定備份的頻率。
  • 備份保留周期:設定備份數據的保留時間,以滿足合規性和歷史記錄需求。

3. 備份介質與存儲

  • 本地備份:使用硬盤、磁帶或NAS/SAN等本地存儲設備進行備份。
  • 云備份:利用云服務提供商的存儲服務進行遠程備份,提供更高的數據可用性和災難恢復能力。
  • 混合備份:結合本地和云備份的優勢,實現靈活的數據保護和恢復策略。

4. 系統配置備份

  • 操作系統配置:備份操作系統的配置文件、注冊表(Windows)或系統文件(Linux)。
  • 應用程序配置:備份所有關鍵應用程序的配置文件、數據庫連接字符串等。
  • 網絡配置:備份路由器、交換機、防火墻等網絡設備的配置。
  • 虛擬化環境配置:備份虛擬機模板、快照和虛擬機管理器的配置文件。

5. 備份驗證與測試

  • 備份驗證:定期驗證備份數據的完整性和可恢復性,確保備份過程沒有錯誤。
  • 災難恢復演練:定期進行災難恢復演練,測試備份數據的恢復流程和時間,確保在真實災難發生時能夠迅速恢復業務。

6. 安全與合規性

  • 加密備份數據:對備份數據進行加密,防止數據在傳輸和存儲過程中被未經授權訪問。
  • 訪問控制:對備份存儲設備和備份過程實施嚴格的訪問控制,確保只有授權人員能夠訪問備份數據。
  • 合規性:確保備份策略符合行業法規和標準,如GDPR、HIPAA等。

7. 自動化與監控

  • 自動化備份:使用自動化工具或腳本來執行備份任務,減少人為錯誤并提高備份效率。
  • 監控與報警:實時監控備份過程和備份存儲設備的狀態,設置報警機制以便在出現問題時及時響應。

寶塔面板有上部分的大部分功能,快照的話,環境也會備份。


1.3 CentOS7重要目錄

在CentOS 7的備份過程中,根目錄(/)下的目錄哪些需要被備份,主要取決于系統的具體使用情況和數據的重要性。以下是一些通常需要備份的關鍵目錄:

  1. /etc
    • 這個目錄包含了系統的配置文件,包括網絡配置(如/etc/sysconfig/network-scripts/)、SSH配置(/etc/ssh/)、防火墻和SELinux配置(/etc/firewalld//etc/selinux/)、主機名和主機文件(/etc/hostname/etc/hosts)等。這些配置文件對于系統的正常運行至關重要,因此在備份時必須包含。
  2. /home
    • 用戶的主目錄通常位于此目錄下,每個用戶都有一個以其用戶名命名的目錄,其中包含用戶的個人文件、配置、下載等。這些目錄對于保留用戶數據至關重要,因此在備份時必須包括。
  3. /root
    • 如果root用戶經常用于執行重要任務或存儲關鍵文件,那么/root目錄也應該被備份。這個目錄包含了root用戶的主目錄和可能存儲在其中的配置文件或重要數據。
  4. /var/log
    • 日志文件對于系統的故障排查和歷史記錄非常有用。如果需要保存系統的歷史記錄或用于后續的審計,那么/var/log目錄也應該被備份。
  5. 數據庫目錄
    • 如果系統上運行有數據庫服務(如MySQL、PostgreSQL等),那么數據庫的數據目錄和配置文件也需要被備份。具體的數據目錄位置取決于數據庫的配置,但通常可以在數據庫的配置文件中找到(如MySQL的/etc/my.cnf)。
  6. /usr/local(或特定應用安裝目錄):
    • 如果在/usr/local或系統的其他非標準位置安裝了第三方軟件或應用,那么這些目錄也應該被備份。這包括應用程序的可執行文件、庫文件、配置文件和數據文件。
  7. 其他重要目錄
    • 根據系統的具體使用情況,可能還有其他重要目錄需要被備份,如/var/spool/mail(系統郵件目錄)、/var/spool/cron(計劃任務目錄)等。

????????需要注意的是,在備份過程中,一些目錄可能會被排除在外,因為它們包含了臨時文件或系統運行時所需的動態生成的文件。例如,/proc/sys/tmp等目錄通常不需要備份,因為它們在系統重啟后會被重新生成或清空。

????????此外,對于整個系統的備份,可以使用tar命令或dd命令等工具來實現。tar命令可以用于打包和壓縮特定的目錄和文件,而dd命令則可以用于備份整個硬盤或分區。在選擇備份方法時,應根據系統的具體需求和數據的重要性來決定。

????????最后,備份完成后,應將備份文件存儲在安全可靠的位置,如外部硬盤、云存儲或遠程服務器,以確保在數據丟失或系統故障時能夠迅速恢復。

????????關機原因那個應該就是嘗試重啟到16700次,但是沒有重啟成功,同時slurmd還在運行,當時說下載東西,剛才查了一下有這種重啟很多次就會影響性能,然后性能不好的同時下載很多東西可能服務器就斷了,推測是這樣。

????????fVjWeDNS.service網上搜不到,冠凌那邊看他們的回復應該也不知道這個服務是干嘛的,我覺得可以先把嘗試啟動/bin/rRUBHDfR的那一行注釋掉,因為也找不到這個文件夾,一直嘗試執行也是個問題。

????????在Linux系統中,目錄結構遵循一套標準規范,不同的目錄用于存放不同類型的文件和數據。以下是您提到的目錄的詳細解釋以及是否需要備份的建議:

目錄解釋

????????在Linux系統中,目錄結構遵循一套標準規范,不同的目錄用于存放不同類型的文件和數據。以下是您提到的目錄的詳細解釋以及是否需要備份的建議:

  1. bin: 存放基本的用戶命令(如ls, cp, mv等),通常是系統啟動時需要的基本命令。
    備份建議: 建議備份,因為它包含基本的系統命令。

  2. dev: 包含設備文件,這些文件表示系統中的設備(如硬盤、終端等)。
    備份建議: 通常不需要備份,因為這些文件在系統重啟時會自動生成。

  3. home: 存放用戶的個人文件和設置,每個用戶在此目錄下有一個子目錄。
    備份建議: 強烈建議備份,因為它包含用戶的個人數據和配置。

  4. lib: 包含系統和應用程序所需的共享庫文件(動態鏈接庫)。
    備份建議: 建議備份,因為某些應用程序和系統命令依賴于這些庫。

  5. lib64: 64位系統的共享庫目錄,類似于lib,但專門用于64位庫。
    備份建議: 建議備份,尤其在64位系統上。

  6. mnt: 通常為空,作為臨時掛載文件系統的掛載點。
    備份建議: 通常不需要備份。

  7. proc: 虛擬文件系統,提供關于系統和進程的信息。
    備份建議: 不需要備份,因為這些文件是動態生成的。

  8. rpm: 用于存放RPM包的目錄,可能包含軟件包的管理信息。
    備份建議: 如果有特殊的軟件包或信息,可以考慮備份。

  9. sbin: 存放系統管理員使用的命令(如shutdown, ifconfig等)。
    備份建議: 建議備份,因為這些命令通常需要在系統維護時使用。

  10. srv: 存放服務相關的數據,如HTTP服務器、FTP服務器的數據等。
    備份建議: 根據服務的需要,建議備份。

  11. tmp: 存放臨時文件,系統和用戶都可以使用,通常在重啟后清空。
    備份建議: 不需要備份,因為其內容是臨時的。

  12. var: 存放可變數據文件,如日志文件、郵件隊列、數據庫文件等。
    備份建議: 強烈建議備份,因為它包含系統運行中的重要數據。

  13. boot: 包含啟動加載器和內核文件,系統啟動所需的文件。
    備份建議: 建議備份,特別是在系統重裝或恢復時。

  14. etc: 存放系統配置文件和目錄(如網絡設置、用戶賬戶等)。
    備份建議: 強烈建議備份,因為這些配置對于系統的正常運行至關重要。

  15. media: 通常用于掛載可移動媒體(如USB驅動器、CD-ROM等)。
    備份建議: 根據需要,備份可移動媒體中的數據。

  16. opt: 存放附加的第三方應用程序。
    備份建議: 根據具體安裝的應用程序,建議備份。

  17. root: 超級用戶的家目錄。
    備份建議: 建議備份,因為可能包含重要的配置和數據。

  18. run: 包含當前運行時信息(如PID文件)。
    備份建議: 不需要備份,因為其內容是動態的。

  19. slurm: 如果系統使用SLURM作為作業調度程序,通常包含相關的文件和信息。
    備份建議: 根據使用情況,可能需要備份。

  20. sys: 提供系統信息,通常是虛擬文件系統。
    備份建議: 不需要備份,因為其內容是動態的。

  21. usr: 包含用戶程序和共享數據,通常分為bin, lib, sbin, share等子目錄。
    備份建議: 建議備份,因為包含很多用戶級別的應用程序。

  22. www: 通常是Web服務器的根目錄。
    備份建議: 強烈建議備份,尤其是Web內容。

總結

  • 強烈建議備份的目錄:?home,?var,?etc,?usr,?boot,?www
  • 建議備份的目錄:?bin,?lib,?lib64,?sbin,?srv,?opt,?root,?rpm
  • 通常不需要備份的目錄:?dev,?mnt,?proc,?tmp,?run,?sys

要加的目錄:

  1. bin: 存放基本的用戶命令(如ls, cp, mv等),通常是系統啟動時需要的基本命令。
    備份建議: 建議備份,因為它包含基本的系統命令。

  2. lib: 包含系統和應用程序所需的共享庫文件(動態鏈接庫)。
    備份建議: 建議備份,因為某些應用程序和系統命令依賴于這些庫。

  3. lib64: 64位系統的共享庫目錄,類似于lib,但專門用于64位庫。
    備份建議: 建議備份,尤其在64位系統上。

  4. sbin: 存放系統管理員使用的命令(如shutdown, ifconfig等)。
    備份建議: 建議備份,因為這些命令通常需要在系統維護時使用。

  5. srv: 存放服務相關的數據,如HTTP服務器、FTP服務器的數據等。
    備份建議: 根據服務的需要,建議備份。

  6. var: 存放可變數據文件,如日志文件、郵件隊列、數據庫文件等。
    備份建議: 強烈建議備份,因為它包含系統運行中的重要數據。

  7. boot: 包含啟動加載器和內核文件,系統啟動所需的文件。
    備份建議: 建議備份,特別是在系統重裝或恢復時。

  8. etc: 存放系統配置文件和目錄(如網絡設置、用戶賬戶等)。
    備份建議: 強烈建議備份,因為這些配置對于系統的正常運行至關重要。

  9. root: 超級用戶的家目錄。
    備份建議: 建議備份,因為可能包含重要的配置和數據。

  10. slurm: 如果系統使用SLURM作為作業調度程序,通常包含相關的文件和信息。
    備份建議: 根據使用情況,可能需要備份。

  11. usr: 包含用戶程序和共享數據,通常分為bin, lib, sbin, share等子目錄。
    備份建議: 建議備份,因為包含很多用戶級別的應用程序。

  12. www: 通常是Web服務器的根目錄。
    備份建議: 強烈建議備份,尤其是Web內容。

  13. run: 包含當前運行時信息(如PID文件)。
    備份建議: 不需要備份,因為其內容是動態的。


2. 備份工具

2.1?tar -g


備份演示

全備份:

在oxTest目錄增加文件后增量備份:

恢復數據到 /home/rtx/oxTest2 :

恢復增量備份:

查看增量備份:


2. rsync

(加 --diff 選項可以實現同步刪除文件,類似差異備份,否則只能增量備份)

rsync?是一個在 Linux 和 Unix 系統中廣泛使用的文件傳輸和同步工具。它可以在本地和遠程之間高效地復制和同步文件和目錄,同時盡量減少數據傳輸量,因為它只傳輸差異部分(即已更改的部分)。rsync?非常適合用于備份和鏡像,以及作為高效的文件傳輸工具。

基本語法

rsync [選項] 源路徑 目標路徑

常用選項

  • -a?或?--archive:歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等同于?-rlptgoD
  • -v?或?--verbose:詳細模式,輸出更多信息。
  • -z?或?--compress:在傳輸時壓縮數據。
  • -r?或?--recursive:遞歸復制目錄樹。
  • -l?或?--links:復制符號鏈接作為符號鏈接。
  • -p?或?--perms:保持文件權限。
  • -t?或?--times:保持文件時間戳。
  • -g?或?--group:保持文件組信息。
  • -o?或?--owner:保持文件所有者信息(超級用戶才能使用)。
  • -D?或?--devices:保持設備文件信息(超級用戶才能使用)。
  • --delete:刪除目標目錄中源目錄中沒有的文件(使兩邊內容一致)。
  • --progress:顯示傳輸進度。
  • -e:指定遠程 shell,用于通過 SSH 傳輸文件(如?-e "ssh -p 2222")。
  • --contimeout=N:設置連接超時時間,單位為秒。

示例

  1. 本地目錄同步

    rsync -avz /source/directory/ /destination/directory/

    這個命令會將?/source/directory/?目錄下的所有內容(包括子目錄和文件)同步到?/destination/directory/,同時保持文件屬性、壓縮數據,并顯示詳細過程。

  2. 通過 SSH 遠程同步

    rsync -avz -e "ssh -p 2222" /local/directory/ user@remotehost:/remote/directory/

    這個命令會將本地的?/local/directory/?目錄通過 SSH(假設 SSH 端口為 2222)同步到遠程主機?remotehost?的?/remote/directory/?目錄下。

  3. 刪除目標目錄中不存在的文件

    rsync -avz --delete /source/directory/ /destination/directory/

    這個命令除了同步文件外,還會刪除?/destination/directory/?中那些在?/source/directory/?中不存在的文件,使兩邊內容完全一致。


備份演示

第一次全備份:

添加一個文件后增量備份:

無法把增量備份中增量的數據單獨做成一個文件:

rsync是傳輸和同步文件,目的文件沒有壓縮。


3. rdiff-backup

????????在Linux的CentOS 7中,差異備份工具的一個常用選項是rdiff-backup。rdiff-backup工具特別適用于累積差異備份,通過它,用戶可以僅備份自上次完整備份或差異備份以來發生變化的數據,從而節省存儲空間并提高效率。(在公司用rdiff-backup備份的話,像home目錄和其它重要目錄,可以每天備份一次,然后其他數據庫的數據可以兩天備份一次,環境之類的不太懂在哪個文件,然后會修改的其他文件就可以一周備份一次,都保留兩份)

rdiff-backup  ==> 用于累積差異備份,加上自己寫的shell script,每日備份,效果更佳

????????先用yum search rdiff-backup看看是否yum源含有rdiff-backup這個package,若沒有的話請yum install epel-release

接下來yum install?rdiff-backup

用法用man來查一下吧,直接貼一份腳本:

?

(方括號相當于兩個小括號,用來判斷真假)

腳本文件下載地址:?百盤?密碼:?9af9

然后設定每日定時進行差異備份

?

?

我設定為每日晚上10點自動進行差異備份

下面,查看一下服務器備份的情況

?

可以通過時間來還原該目錄下的某個文件或者該整個目錄,還原方法如下:

(以下皆為演示需要才新建backuptest文件夾,若真正需要還原的時候可以直接指定到目標文件夾進行覆蓋 比如: rdiff-backup -r now /backup/etc.dir /etc? 實驗的時候最好不要這樣用)

1.按時間還原整個目錄

?

還原只會按指定時間之前最近的一次備份進行還原,比如上面我寫now,那么它會找到在當前時間之前最近的一次備份進行還原,也就是還原到上2圖中的Current mirror: Tue Dec 12 22:00:01 2017這個時間

?

可以看到,還原后,該文件夾的時間確實是那個時間點之前的時間,說明該目錄最后一次修改是在20:49:13這個時間,

若要單獨還原某文件到某個時間點可以進行如下操作:

首先通過man rdiff-backup來查看下還原部分介紹RESTORING開頭的部分

?

????????該部分內容介紹了,凡是以.diff,.snapshot,.dir,.gz(被gzip壓縮后)皆可進行還原,而.missing表示文件在該時間點后已經不存在

????????rdiff-backup-data文件夾下放的是差異文件,這些都是整個目錄的差異備份文件(可以直接使用該文件還原到某個時間點)

?

????????而rdiff-backup-data目錄內的increments記錄的是etc這個文件夾下文件的差異備份文件(可以使用該文件進行還原etc目錄下的某個文件到某個時間點)

下面舉例還原/etc/resolve.conf這個文件,首先查看下差異備份文件:

?

還原時間為2017-12-11 22:45:06,查看下我們本地文件

?

本地文件時間為2017-12-12 20:49:13,因此現在將該文件還原到上述差異備份文件所在的時間點

?

????????以上便成功將文件還原到了2017-12-11 22:45:06那個時候的狀態,你可能會奇怪,為什么文件的日期卻是2017-12-10 11:15:28?這是因為我們的rdiff-backup程序只會記錄備份時間,而不會修改文件的任何屬性,這說明在2017-12-11 22:45:06這個時間的時候,文件的modification time(-mtime)便是2017-12-10 11:15:28


備份演示

?

?

差異備份(增和減):

?

?


4. 差異和優缺點

在CentOS 7的備份策略中,tarrsyncrdiff-backup是三種常用的工具,它們各自適用于不同的場景,并具有不同的優缺點。

1. tar -g

適用情況

  • 全系統或目錄備份:tar命令非常適合用于整個系統或指定目錄的備份。它可以保留文件權限、所有者和其他屬性,非常適合在災難恢復時重建系統或目錄結構。

優點

  • 靈活性高:可以指定任意目錄進行備份,也可以包含或排除特定文件。
  • 保留文件屬性:備份時保留文件的權限、時間戳等屬性。
  • 支持多種壓縮格式:如gzip、bzip2等,可以有效減少備份文件的大小。

缺點

  • 恢復時需要額外操作:恢復時可能需要手動重新創建被排除的目錄(如/proc、/sys等)。
  • 備份時間較長:對于大型目錄或系統,備份過程可能需要較長時間。

2. rsync

適用情況

  • 遠程和本地同步:rsync非常適合在本地和遠程系統之間同步文件和目錄。它支持增量備份,只傳輸更改過的部分,從而節省時間和帶寬。

優點

  • 增量備份:只備份自上次備份以來更改過的數據,減少備份時間和存儲空間。
  • 保持文件屬性:保留原始文件的權限、時間戳、軟硬鏈接等。
  • 壓縮傳輸:在傳輸過程中可以壓縮數據,減少帶寬使用。
  • 安全性:可以通過SSH等安全協議傳輸數據。

缺點

  • 恢復功能有限:rsync本身不直接提供恢復功能,通常需要與其他工具結合使用。
  • 依賴外部連接:在遠程備份時,依賴穩定的網絡連接。

3. rdiff-backup

適用情況

  • 高效增量備份:rdiff-backup結合了增量備份和鏡像備份的優點,非常適合需要頻繁備份且數據量大的場景。

優點

  • 高效性:通過增量備份和數據壓縮技術,顯著提高備份效率,減少存儲空間的占用。
  • 靈活性:支持本地和遠程備份,用戶可以根據需要選擇合適的備份方式。
  • 安全性:使用SSH進行數據傳輸,確保備份數據的安全性。
  • 恢復功能強大:支持按時間點恢復文件或整個目錄,用戶可以恢復到任意一個歷史備份點。

缺點

  • 學習曲線:對于初學者來說,可能需要一定時間來熟悉其命令和選項。
  • 依賴外部工具:在Windows等非Linux系統上使用時,可能需要借助其他工具(如Cygwin)來運行。

?


3. rdiff-backup安裝和使用

????????在Linux的CentOS 7中,差異備份工具的一個常用選項是rdiff-backup。rdiff-backup工具特別適用于累積差異備份,通過它,用戶可以僅備份自上次完整備份或差異備份以來發生變化的數據,從而節省存儲空間并提高效率。rdiff-backup不能備份非目錄,文件可以新建一個目錄放進去。

????????在CentOS或RHEL系統上,可以使用yum包管理器來安裝rdiff-backup:

sudo yum install epel-release
sudo yum install rdiff-backup

3.1 備份命令rdiff-backup

使用 rdiff-backup 命令將?example?目錄備份到?example-backup?目錄:

rdiff-backup example example-backup

第二次備份操作,rdiff-backup 會自動進行增量備份:

使用?--list-increments?選項列出所有備份信息:

rdiff-backup --list-increments example-backup

或者使用?--list-increment-sizes?以表格形式列出備份大小:

rdiff-backup --list-increment-sizes example-backup


3.2 恢復命令--restore-as-of

????????執行備份命令到新目錄時,新目錄下會生成一個rdiff-back-data的目錄,里面有很多文件,命名為同一時間的就可以用rdiff-backup?--restore-as-of恢復到當時備份的時間。

用?--restore-as-of?選項指定要恢復的時間點。例如,恢復到某個具體時間:

rdiff-backup --restore-as-of 'Sun Sep 8 11:42:30 2024' example-backup example-restore

或者恢復到最新備份:

rdiff-backup --restore-as-of now example-backup example-restore

如果目標目錄已存在,可以使用?--force?選項強制覆蓋:

rdiff-backup --restore-as-of now --force example-backup example

3.3 刪除命令--remove-older-than

為了節省存儲空間,可以刪除舊的備份文件。以下是刪除舊備份的基本步驟:

使用?--remove-older-than?選項刪除指定時間之前的備份。例如,刪除一天前的備份:

rdiff-backup --remove-older-than 1D example-backup

如果需要刪除多個備份,可以使用?--force?選項:

rdiff-backup --remove-older-than 1D --force example-backup

man查看--remove-older-than詳細信息:

s,m,h,D,W,M,Y,分別代表秒,分,時,天,周,月,年

回來演示刪除一天前的備份:

目前來看rdiff-backup-data里有差異備份的才會刪除,否則不會刪除


3.4 備份目錄選擇

公司服務器磁盤:

?

?


?

現在可以暫時備份home目錄和root目錄和etc目錄和www目錄,分別備份到兩個back目錄里。


3.5 手動備份home目錄演示

rdiff-backup --include /dir1/important_files dir1 dir2

第一次備份

?

把/home目錄的所有內容備份到一個新建的目錄:/homeBack

?

除了原有的數據還多了一份rdiff-backup-data目錄,新備份homeBack里的可執行文件也可執行

?

?


第二次備份

進入原home目錄里增加一個文件和刪除一個文件后,進行第二次備份

?

目標目錄的rdiff-backup-data里自動增加了多份新文件

?


第三次備份

類似第二份備份的操作,在原home目錄修改一些文件后再進行第三次備份:

?

目標目錄的rdiff-backup-data里也自動新增一系列第三次備份的相關文件:

?


恢復到第二次備份數據

?

rdiff-backup-data生成了一份恢復日志,里面的其它內容沒有變化

?

進入原home目錄后發現確實恢復到了第二份備份的數據(無TestAdd2.txt,Test目錄沒修改成TestDiff)。

?


3.6 自動化備份腳本

rdiff-backup備份腳本:

#!/bin/bash  
sour_dirs="/home/back1" # 設置要備份的目錄列表
dest_dirs="/home/back2" # 設置備份目標目錄(遠程或本地)
log_file="/home/back2/back.log" # 設置備份日志文件的路徑 
date=$(date +'%y%m%d %H:%M:%S') #備份的日期[ ! -d $dest_dirs ] && mkdir -p $dest_dirs #如果目標目錄不存在就創建
[ ! -d $log_file ] && touch $log_file #如果日志文件不存在就創建
echo "===========================${date}=======================" >>$log_file  
for s_dir in $sour_dirs
do  d_dir=$dest_dirs${s_dir}.dir[ ! -f $d_dir ] && mkdir -p $d_dir #如果源文件名.dir不存在就創建rdiff-backup $s_dir $d_dir #將源文件分別備份為 源文件名.dirif [ $? == 0 ]; then   #如果上一個命令沒出問題就繼續succ_msg=${succ_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息if [ $? == 0 ]; thenrdiff-backup --force --remove-older-than 1M $d_dir #移除一個月以前的備份文件[ $? == 0 ] && rmv_msg=${rmv_msg}"$d_dir\n" #獲取日志信息fi;elsefail_msg=${fail_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息fi;
done  
echo -e "[BACKUP SUCCESS]\n$succ_msg" >> "$log_file" #輸入日志信息到日志文件
echo -e "[BACKUP FAILED ]\n$fail_msg" >> "$log_file"
echo -ne "[REMOVE FILES ]\n${rmv_msg}" >> "$log_file"
echo -e "(remove older than 1 month files is all above)\n" >> "$log_file"

第一次備份

在下面環境運行以上腳本:

日志文件和data目錄都正常:


第二次備份

進入原/home/back1目錄里增加一個文件和刪除一個文件后,進行第二次備份

data目錄也正常:


測試多目錄備份腳本

運行以下腳本:

結果和預料一樣:


測試Linux定時任務

#!/bin/bash  
sour_dirs="/home/back1 /home/back0" # 設置要備份的目錄列表
dest_dirs="/home/backEnd2" # 設置備份目標目錄(遠程或本地)
log_file="/home/backEnd2/back.log" # 設置備份日志文件的路徑 
date=$(date +'%Y%m%d %H:%M:%S') #備份的日期[ ! -d $dest_dirs ] && mkdir -p $dest_dirs #如果目標目錄不存在就創建
[ ! -d $log_file ] && touch $log_file #如果日志文件不存在就創建
echo "===========================${date}=======================" >>$log_file  
for s_dir in $sour_dirs
do  d_dir=$dest_dirs${s_dir}.dir[ ! -f $d_dir ] && mkdir -p $d_dir #如果源文件名.dir不存在就創建rdiff-backup $s_dir $d_dir #將源文件分別備份為 源文件名.dirif [ $? == 0 ]; then   #如果上一個命令沒出問題就繼續succ_msg=${succ_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息if [ $? == 0 ]; thenrdiff-backup --force --remove-older-than 15m $d_dir #移除15分鐘以前的備份文件[ $? == 0 ] && rmv_msg=${rmv_msg}"$d_dir\n" #獲取日志信息fi;elsefail_msg=${fail_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息fi;
done  
echo -e "[BACKUP SUCCESS]\n$succ_msg" >> "$log_file" #輸入日志信息到日志文件
echo -e "[BACKUP FAILED ]\n$fail_msg" >> "$log_file"
echo -ne "[REMOVE FILES ]\n${rmv_msg}" >> "$log_file"
echo -e "(remove older than 1 month files is all above)\n" >> "$log_file"

1. 寶塔面板

成功定時啟動了shell腳本:


backEnd2

一分鐘執行一次腳本,刪除5分鐘前的備份(無差異備份的話,不會刪除):

#!/bin/bash  
sour_dirs="/home/back1 /home/back0" # 設置要備份的目錄列表
dest_dirs="/home/backEnd2" # 設置備份目標目錄(遠程或本地)
log_file="/home/backEnd2/back.log" # 設置備份日志文件的路徑 
date=$(date +'%y%m%d %H:%M:%S') #備份的日期[ ! -d $dest_dirs ] && mkdir -p $dest_dirs #如果目標目錄不存在就創建
[ ! -d $log_file ] && touch $log_file #如果日志文件不存在就創建
echo "===========================${date}=======================" >>$log_file  
for s_dir in $sour_dirs
do  d_dir=$dest_dirs${s_dir}.dir[ ! -f $d_dir ] && mkdir -p $d_dir #如果源文件名.dir不存在就創建rdiff-backup $s_dir $d_dir #將源文件分別備份為 源文件名.dirif [ $? == 0 ]; then   #如果上一個命令沒出問題就繼續succ_msg=${succ_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息if [ $? == 0 ]; thenrdiff-backup --force --remove-older-than 5m $d_dir #移除5分鐘以前的備份文件[ $? == 0 ] && rmv_msg=${rmv_msg}"$d_dir\n" #獲取日志信息fi;elsefail_msg=${fail_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息fi;
done  
echo -e "[BACKUP SUCCESS]\n$succ_msg" >> "$log_file" #輸入日志信息到日志文件
echo -e "[BACKUP FAILED ]\n$fail_msg" >> "$log_file"
echo -ne "[REMOVE FILES ]\n${rmv_msg}" >> "$log_file"
echo -e "(remove older than files is all above)\n" >> "$log_file"

15:55

1分鐘后:

?在back1里創建文件:

發現有很多文件但沒刪除:(因為無差異備份的話,不會刪除)

看back0:

繼續一直在back1創建文件,在back0也創建:

過一會發現有差異備份且過了5分鐘的文件都刪除了,包括前面文件中沒有差異備份的。

測試完成


2. Linux定時任務命令

????????定時任務無非就是在什么時間干什么命令。文件怎么配置?定時任務一般用root執行,這里介紹crontab,crontab -e 用戶定時任務,有語法檢查功能。直接編輯系統的定時任務:

vim /etc/crontab

可以在里面直接寫,但一般用crontab -e寫:

crontab -e

接下來就是怎么去寫?

* * * * * echo hello

五顆星代表分時日月周

  • 分0-59
  • 時0-23 0表示凌晨12點
  • 日1-31天
  • 月1-12月
  • 周0-6天,0和7都表示星期天

示例1:每天七點半吃早餐

30 07 * * * root echo 吃早餐 #寫echo,實際當前解釋器是看不到的,可以通過日志查看

示例2:每天晚上11點準時睡覺

00 23 * * * root echo 睡覺

示例3:每分鐘輸出自己的姓名

* * * * * root echo GR

示例4:每個小時的第5分鐘執行echo hello

5 * * * * root echo hello

示例5:每10分鐘執行echo hello

10 * * * * root echo hello

示例6:早上7點到上午11點執行echo hello

00 7-11 * * * root echo hello

示例7:早上7點到上午11點,下午一點到下午三點執行echo hello

00 7-11,13-15 * * * root echo hello #用逗號表示間隔

簡單看下配置文件:

2.1 系統配置文件
  • /etc/crontab 系統定時任務
  • /var/log/cron 定時任務日志
  • /var/spool/mail/root?是root的郵件信息,每執行一次就提示一次信息(一般都關閉這個,因為影響性能)
  • /etc/cron.hourly 每小時執行一次的定時任務配置文件
  • /etc/cron.daily 每天執行一次的定時任務配置文件
  • /etc/cron.weekly 每周執行一次的定時任務配置文件
  • /etc/cron.monthly 每月執行一次的定時任務配置文件
  • /etc/cron.deny 不允許哪個用戶進行定時任務
2.2 用戶的配置文件
  • /var/spool/cron/root 用戶定時任務,vim編輯但不支持語法檢查,用crontab -e就可以檢查了
  • crontab -e 編輯 ---->實際寫入到/var/spool/cron/? ? ? ? ? #有語法檢測的功能
  • crontab -l 列出定時任務

3 crontab?-e

rbShell2.sh的內容:(刪除5分鐘前的備份)

#!/bin/bash  
sour_dirs="/home/back1 /home/back0" # 設置要備份的目錄列表
dest_dirs="/home/backEnd3" # 設置備份目標目錄(遠程或本地)
log_file="/home/backEnd3/back.log" # 設置備份日志文件的路徑 
date=$(date +'%y%m%d %H:%M:%S') #備份的日期[ ! -d $dest_dirs ] && mkdir -p $dest_dirs #如果目標目錄不存在就創建
[ ! -d $log_file ] && touch $log_file #如果日志文件不存在就創建
echo "===========================${date}=======================" >>$log_file  
for s_dir in $sour_dirs
do  d_dir=$dest_dirs${s_dir}.dir[ ! -f $d_dir ] && mkdir -p $d_dir #如果源文件名.dir不存在就創建rdiff-backup $s_dir $d_dir #將源文件分別備份為 源文件名.dirif [ $? == 0 ]; then   #如果上一個命令沒出問題就繼續succ_msg=${succ_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息if [ $? == 0 ]; thenrdiff-backup --force --remove-older-than 5m $d_dir #移除5分鐘以前的備份文件[ $? == 0 ] && rmv_msg=${rmv_msg}"$d_dir\n" #獲取日志信息fi;elsefail_msg=${fail_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息fi;
done  
echo -e "[BACKUP SUCCESS]\n$succ_msg" >> "$log_file" #輸入日志信息到日志文件
echo -e "[BACKUP FAILED ]\n$fail_msg" >> "$log_file"
echo -ne "[REMOVE FILES ]\n${rmv_msg}" >> "$log_file"
echo -e "(remove older than files is all above)\n" >> "$log_file"


3.1 定時測試:

(次數測試的時候,腳本里面是刪除30分鐘前的)

每天的11:20執行一次腳本(五個* 分別是,分,時,日,月,周)

執行結果,成功執行:


如果想每10分鐘執行一次怎么寫的,注意:這樣寫是每小時的第10分鐘執行一次

10 * * * * sh /home/rtx/rdiff-backupTest/rdiff-backup_shell/rbShell.sh

?目前時間11:25

13:10:后


3.2 每分鐘測試

每1分鐘自動執行一次(在第一顆*后面加/1):

*/1 * * * * sh /home/rtx/rdiff-backupTest/rdiff-backup_shell/rbShell.sh

現在是16.14

1分鐘后發現自動完成了備份:

在back1里創建文件:

過了幾分鐘:

因為在16:20又創建了文件,過了幾分鐘發現16:20及之前的文件都被刪除了:

符合預期


3.3 定時任務注意事項

  • 在定時任務中不識別%需要加轉義\% 或者將命令寫到腳本里面
  • 執行腳本盡量前面加上sh或者bash使用
  • /server/scripts/backup.sh 需要給腳本執行權限
  • sh /server/scripts/backup.sh 不需要腳本執行權限

????????執行腳本的結果,定時任務的結果定向到空或者文件中,在執行每條定時任務后,系統會自動給用戶發送文件信息,/var/spool/mail/root 對于有用戶訪問的服務器會將郵件功能關閉 以減少性能損失,關閉后定時任務執行后發郵件發布出去,會生成臨時的小文件,執行一行定時任務會執行一個小文件,小文件越多會導致inode不夠用,無法寫入數據到磁盤。

查看郵件功能是否開啟:

systemctl stat postfix.service

關閉郵件功能:

systemctl stop postfix.service
  • 避免不必要的程序及命令輸出,比如tar zcf,tar zcvf,不用v

  • 打包盡量到相對路徑,一般打包都先cd,在tar,但是當前解釋器不會真的cd,而是在新的解釋器下,所以不影響當前界面。

????????定時任務的腳本中,程序盡量使用絕對路徑,用戶定時任務識別的PATH變量,只有/usr/bin/和/bin目錄,使用crontab定義定時任務時 只去/usr/bin/和/bin下面查找任務,比如使用ntpdate就成功不了,可以去查看郵件,郵件輔助我們排查問題

寫定時腳本的流程

  1. 命令行可以執行成功
  2. 寫入腳本,執行腳本可以執行成功
  3. 寫入定時任務進行測試
  4. 排查問題(結果,postfix開啟郵件,個人經驗)

3.4 實際測試

#!/bin/bash
sour_dirs="/home/data" # 設置要備份的目錄列表
dest_dirs="/home/back/databack" # 設置備份目標目錄(遠程或本地)
log_file="/home/back/back.log" # 設置備份日志文件的路徑 
date=$(date +'%Y%m%d %H:%M:%S') #備份的日期[ ! -d $dest_dirs ] && mkdir -p $dest_dirs #如果目標目錄不存在就創建
[ ! -d $log_file ] && touch $log_file #如果日志文件不存在就創建
echo "===========================${date}=======================" >>$log_file  
for s_dir in $sour_dirs
do  d_dir=${dest_dirs}[ ! -f $d_dir ] && mkdir -p $d_dir #如果源文件名.dir不存在就創建rdiff-backup $s_dir $d_dir #將源文件分別備份為 源文件名.dirif [ $? == 0 ]; then   #如果上一個命令沒出問題就繼續succ_msg=${succ_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息if [ $? == 0 ]; thenrdiff-backup --force --remove-older-than 7D $d_dir[ $? == 0 ] && rmv_msg=${rmv_msg}"$d_dir\n" #獲取日志信息fi;elsefail_msg=${fail_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息fi;
done  
echo -e "[BACKUP SUCCESS]\n$succ_msg" >> "$log_file" #輸入日志信息到日志文件
echo -e "[BACKUP FAILED ]\n$fail_msg" >> "$log_file"
echo -ne "[REMOVE FILES ]\n${rmv_msg}" >> "$log_file"
echo -e "(remove older than files is all above)\n" >> "$log_file"


3.5 測試睡眠時產生多個文件

睡眠一分鐘,一分鐘內創建了一個目錄,進入新創建的目錄,在里面創建一個文件和一個目錄:

????????發現睡眠和創建文件都執行了多次(一分鐘一次,用創建精確到秒的txt文件來代替調用腳本),現在測試一下用天的日期作為flag來讓其一天執行一次類似調用腳本的操作。

測試以下shell.sh:

#!/bin/bash    # 設置要監視的目錄路徑    
FILE_PATH="/home/data"# 注意:這里只使用 path 變量,并忽略 action 和 file(因為它們不是默認輸出的一部分)  
inotifywait -mr -e create "$FILE_PATH" | while read path action file; do# 假設 path 變量現在包含完整的文件路徑log_file="/home/rtx/log/monitor1_log/$(date +"%Y-%m-%d").log"# 如果文件存在就進入下一次監控,保證else后面的代碼一天只執行一次if [ -f "$log_file" ];echo "$(date +"%Y-%m-%d %H:%M:%S")目錄 '$FILE_PATH' 里 '$file' 已被 '$action' "echo "日志存在,進入下一次監控"else# 如果日志文件不存在且不是目錄,則創建它    sleep 60touch "$log_file"# 所有輸出重定向到當天的日志文件exec >> "$log_file" 2>&1echo "$(date +"%Y-%m-%d %H:%M:%S")目錄 '$FILE_PATH' 里 '$file' 已被 '$action' "echo "---------------------------------------"echo "腳本被調用"touch /home/rtx/Test$(date +"%Y-%m-%d-%H-%M-%S").txtfi
done

3.6 最終備份腳本

#!/bin/bash
sour_dirs="/home/home /home/admin" # 設置要備份的目錄列表
dest_dirs="/home/back" # 設置備份目標目錄(遠程或本地)
log_file="/home/log/back_log/$(date +'%Y-%m-%d').log" # 設置備份日志文件的路徑 
date=$(date +'%Y-%m-%d %H:%M:%S') #備份的日期[ ! -d $dest_dirs ] && mkdir -p $dest_dirs #如果目標目錄不存在就創建
[ ! -d $log_file ] && touch $log_file #如果日志文件不存在就創建
# 所有輸出重定向到當天的日志文件
exec >> "$log_file" 2>&1
echo "===========================${date}======================="
for s_dir in $sour_dirs
dod_dir=$dest_dirs${s_dir}_back[ ! -f $d_dir ] && mkdir -p $d_dir #如果源文件名.dir不存在就創建rdiff-backup $s_dir $d_dir #將源文件分別備份為 源文件名_backif [ $? == 0 ]; then   #如果上一個命令沒出問題就繼續succ_msg=${succ_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息if [ $? == 0 ]; thenrdiff-backup --force --remove-older-than 6M $d_dir #移除6個月以前的備份文件[ $? == 0 ] && rmv_msg=${rmv_msg}"$d_dir\n" #獲取日志信息fi;elsefail_msg=${fail_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息fi;
done
echo -e "[BACKUP SUCCESS]\n$succ_msg" #輸入日志信息到日志文件
echo -e "[BACKUP FAILED ]\n$fail_msg"
echo -ne "[REMOVE FILES ]\n${rmv_msg}"
echo -e "(remove older than files is all above)\n"


監控Linux目錄差異

????????inotifywait 是一個用于監控文件系統事件的命令行工具,屬于 inotify-tools 軟件包。它基于 Linux 內核的 inotify 功能,可以實時監聽文件或目錄的變化,如創建、刪除、修改等事件。

安裝所用工具:

sudo yum install inotify-tools

命令行運行后可以發現輸出了三個字段,這三個字段在后面的腳本可用可不用。

運行腳本:

#!/bin/bash    # 設置要監視的目錄路徑    
FILE_PATH="/home/data"     # 初始化日志(可選,有助于確認腳本已啟動)    
echo "開始監視目錄 '$FILE_PATH'..."# 監視文件修改和創建事件(還可監視刪除,打開關閉等)
# 注意:這里只使用 path 變量,忽略 action 和 file(因為它們不是默認輸出的一部分)  
inotifywait -mr -e modify,create "$FILE_PATH" | while read path; do    sleep 10# 可以添加對特定文件的條件檢查或調用其他腳本  # 例如:if [ "$path" == "$FILE_PATH/specific_file.txt" ]; then ... fi  # 調用腳本/home/data/shell.sh 
done# nohup /home/shell.sh > /home/test.log 2>&1 &
  • -m?選項表示以監視模式運行,即持續監控而非一次性運行。
  • -r?選項表示遞歸監視指定目錄及其子目錄。
  • -e modify,create?指定監視的事件類型,這里監視文件的修改和創建。
  • "$FILE_PATH"?是要監視的目錄路徑。
  • |?將?inotifywait?的輸出傳遞給后續的?while read?循環。
  • while read path; do?循環從?inotifywait?的輸出中讀取每一行,path?變量包含了文件路徑和事件信息(inotifywait?的默認輸出中通常包括事件的路徑和操作)

輸入以下命令在后臺運行上面的腳本

nohup /home/shell.sh > /home/test.log 2>&1 &
  • nohup:允許腳本在你退出終端后繼續運行。
  • /home/shell.sh:腳本的完整路徑。
  • > /home/test.log:將標準輸出重定向到 test.log 文件。
  • 2>&1:將標準錯誤也重定向到 test.log 文件。
  • &:將命令放到后臺執行。

如果在腳本里輸出了日志到其他文件,可以把標準輸出重定向到空文件:

nohup /home/rtx/shell.sh > /dev/null 2>&1 &

FILE_PATH="/home/rtx/data"  # 注意:這里只使用 path 變量,并忽略 action 和 file(因為它們不是默認輸出的一部分)  
inotifywait -mr -e modify,create "$FILE_PATH" | while read path; do    # 假設 path 變量現在包含完整的文件路徑sleep 7log_file="/home/rtx/log/$(date +"%Y-%m-%d").log"# 如果日志文件不存在且不是目錄,則創建它    [ ! -f "$log_file" ] && touch "$log_file"# 所有輸出重定向到當天的日志文件exec > "$log_file" 2>&1echo "---------------------------------------"echo "$(date +"%Y-%m-%d %H:%M:%S")目錄 '$FILE_PATH' 里 '$path' 已被修改或創建"# 在這里可以添加對特定文件的條件檢查或調用其他腳本  # 例如:if [ "$path" == "$FILE_PATH/specific_file.txt" ]; then ... fi  # 調用腳本(如果需要)    # script.sh "$path"    
done


最終測試

把前面定時任務的腳本改一下日志:

#!/bin/bash
sour_dirs="/home/data" # 設置要備份的目錄列表
dest_dirs="/home/back/databack" # 設置備份目標目錄(遠程或本地)
log_file="/home/log/back_log/$(date +'%Y-%m-%d').log" # 設置備份日志文件的路徑 
date=$(date +'%Y-%m-%d %H:%M:%S') #備份的日期
?
[ ! -d $dest_dirs ] && mkdir -p $dest_dirs #如果目標目錄不存在就創建
[ ! -d $log_file ] && touch $log_file #如果日志文件不存在就創建
# 所有輸出重定向到當天的日志文件
exec > "$log_file" 2>&1
echo "===========================${date}======================="
for s_dir in $sour_dirs
do ?d_dir=${dest_dirs}[ ! -f $d_dir ] && mkdir -p $d_dir #如果源文件名.dir不存在就創建rdiff-backup $s_dir $d_dir #將源文件分別備份為 源文件名.dirif [ $? == 0 ]; then ? #如果上一個命令沒出問題就繼續succ_msg=${succ_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息if [ $? == 0 ]; thenrdiff-backup --force --remove-older-than 7D $d_dir[ $? == 0 ] && rmv_msg=${rmv_msg}"$d_dir\n" #獲取日志信息fi;elsefail_msg=${fail_msg}"source: $s_dir, dest: $d_dir\n" #獲取日志信息fi;
done ?
echo -e "[BACKUP SUCCESS]\n$succ_msg" #輸入日志信息到日志文件
echo -e "[BACKUP FAILED ]\n$fail_msg"
echo -ne "[REMOVE FILES ]\n${rmv_msg}"
echo -e "(remove older than files is all above)\n"

監控腳本改一下日志和調用上面的腳本:

#!/bin/bash ? ?# 設置要監視的目錄路徑 ? ?
FILE_PATH="/home/rtx/data" ?# 注意:這里只使用 path 變量,并忽略 action 和 file(因為它們不是默認輸出的一部分) ?
inotifywait -mr -e modify,create "$FILE_PATH" | while read path; do ? ?# 假設 path 變量現在包含完整的文件路徑sleep 7log_file="/home/log/monitor_log/$(date +"%Y-%m-%d").log"# 如果日志文件不存在且不是目錄,則創建它 ? ?[ ! -f "$log_file" ] && touch "$log_file"# 所有輸出重定向到當天的日志文件exec > "$log_file" 2>&1echo "---------------------------------------"echo "$(date +"%Y-%m-%d %H:%M:%S")目錄 '$FILE_PATH' 里 '$path' 已被修改或創建"# 在這里可以添加對特定文件的條件檢查或調用其他腳本 ?# 例如:torif [ "$path" == "$FILE_PATH/specific_file.txt" ]; then ... fi ?# 調用腳本(如果需要) ? ?# script.sh "$path" ? /home/shellTest.sh 
done

數據也備份了:


測試普通用戶監視:

最終監控腳本

#!/bin/bash    # 設置要監視的目錄路徑    
FILE_PATH="/home/data" error_log="/home/admin/log/error.log" #錯誤日志,確保創建好,因為還沒重定向到每天的日志# 設置日志目錄,下面還會創建每天的日志文件
LOG_DIR="/home/admin/log/auto_monitor_log"
if [ ! -d $LOG_DIR ]; thenmkdir -p $LOG_DIR #如果目標目錄不存在就創建if [ $? -ne 0 ]; then #如果上一條命令不正常echo "$(date +"%Y-%m-%d %H:%M:%S") 無法創建日志目錄 '$LOG_DIR'" >> $error_logfi
fi# 監控上面目錄的創建操作,把輸出讀取到path,action,file三個變量里 
inotifywait -mr -e create "$FILE_PATH" | while read path action file; do    # 定義當天的日志文件log_file="$LOG_DIR/$(date +"%Y-%m-%d").log"sleep 1# 如果文件存在就進入下一次監控,保證else后面的代碼一天只執行一次if [ -f "$log_file" ]; thenecho "$(date +"%Y-%m-%d %H:%M:%S")目錄 '$FILE_PATH' 里 '$file' 已被 '$action' "echo "$log_file 日志存在,進入下一次監控"else # 如果日志文件不存在且不是目錄,則創建它    sleep 60touch "$log_file"if [ $? -ne 0 ]; then #如果上一條命令不正常echo "$(date +"%Y-%m-%d %H:%M:%S") 無法創建日志文件 '$log_file'" >> $error_logfi# 所有輸出重定向到當天的日志文件exec >> "$log_file" 2>&1echo "$(date +"%Y-%m-%d %H:%M:%S")目錄 '$FILE_PATH' 里 '$file' 已被 '$action' "echo "$(date +"%Y-%m-%d %H:%M:%S") 腳本被調用"echo "---------------------------------------"fi
done

本篇完。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72018.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Claude:AI領域的多面手,從語言模型到智能編碼

文章目錄 引言Claude的起源與發展1. Claude的誕生2. Claude 3.7 Sonnet的突破 版本迭代技術原理Claude的獨特優勢混合推理模式成本與性能的平衡開發者友好的工具 功能及應用Claude的未來展望結論 引言 Claude是由Anthropic公司開發的大型語言模型,在人工智能領域&a…

RocketMQ 詳細教程(Spring Boot Spring Cloud Alibaba)

1. RocketMQ 簡介 RocketMQ 是阿里巴巴開源的一款分布式消息隊列,具有高吞吐量、低延遲、可靠性等特點,廣泛應用于金融、電商、物聯網等領域。 RocketMQ 的核心特性: 高可靠性:支持消息存儲、重復消費、失敗重試等高可用性&…

Spring(七)AOP-代理模式

目錄 代理模式 一 靜態代理 一、核心作用 二、使用場景 二 動態代理 一、核心作用 二、使用場景 具體實現:(初始) 具體實現:(改進) 一、核心業務邏輯 1. 接口 MathCalculator 2. 實現類 MathCa…

Java Lambda表達式:現代編程的簡潔之道

引言 在Java 8中,Lambda表達式的引入標志著Java語言向函數式編程邁出了重要一步。Lambda不僅簡化了代碼結構,還提升了開發效率,使得Java能夠更靈活地應對現代編程需求。本文將深入探討Lambda表達式的核心概念、語法規則、應用場景及其對Java…

BGP分解實驗·21——BGP選路原則之本地優先級

當使用BGP路徑屬性——本地優先級,進行路由優選時,優選“本地優先級”數值較大的那個。(eBGP之間更新不攜帶這個屬性) 實驗拓撲如下: 在未實現本地優先級策略前,先在各個BGP之間配置完成基本連接。 R1的基…

【redis】應用場景:共享會話和手機驗證碼

文章目錄 共享會話實現思路 手機驗證碼實現思路偽代碼實現生成驗證碼驗證驗證碼 共享會話 實現思路 如果每個應用服務器,維護自己的會話數據,此時彼此之間胡共享,用戶請求訪問到不同的服務器上,就可能會出現一些不能正確處理的情…

通義萬相 2.1 + 藍耘算力,AI 視頻生成的夢幻組合

在這個科技日新月異的時代,人工智能不斷刷新著我們對世界的認知。一次偶然的機會,我借助北京藍耘科技股份有限公司提供的算力支持,踏上了使用通義萬相 2.1 進行 AI 視頻生成的奇妙之旅。 目錄 1.1初遇藍耘科技: 1.2通義萬相 2.1…

【Go萬字洗髓經】Golang內存模型與內存分配管理

本文目錄 1. 操作系統中的虛擬內存分頁與進程管理虛擬內存與內存隔離 2. Golang中的內存模型內存分配流程內存單元mspan線程緩存mcache中心緩存mcentral全局堆緩存mheapheapArena空閑頁索引pageAlloc 3. Go對象分配mallocgc函數tiny對象分配內存 4.結合GMP模型來看內存模型tiny…

33.HarmonyOS NEXT NumberBox 步進器高級技巧與性能優化

HarmonyOS NEXT NumberBox 步進器高級技巧與性能優化 一、高級交互設計 1. 組件聯動控制 // 與Slider雙向綁定 State value: number 50Slider({value: this.value,onChange: (v) > this.value v })NumberBox({value: this.value,onChange: (v) > this.value v })2. …

關于ModbusTCP/RTU協議轉Ethernet/IP(CIP)協議的方案

IGT-DSER智能網關模塊支持西門子、倍福(BECKHOFF)、羅克韋爾AB,以及三菱、歐姆龍等各種品牌的PLC之間通訊,支持Ethernet/IP(CIP)、Profinet(S7),以及FINS、MC等工業自動化常用協議,同時也支持PLC與Modbus協議的工業機器人、智能儀…

通義萬相2.1 × 藍耘智算:AIGC 界的「黃金搭檔」如何重塑創作未來?

在人工智能生成內容(AIGC)領域,通義萬相2.1與藍耘智算的結合,正以技術協同效應重新定義創作的可能性。這一組合不僅突破了傳統創作工具的效率瓶頸,更通過算法與算力的深度融合,為影視、廣告、游戲、教育等領…

【FreeRTOS】FreeRTOS操作系統在嵌入式單片機上裸機移植

目錄 一 RTOS概述 二 FreeRTOS移植 三 FreeRTOS使用 四 附錄 一 RTOS概述 先了解一些基礎概念,以下內容摘自FreeRTOS官網(FreeRTOS? - FreeRTOS?): 【1】RTOS基礎知識 實時操作系統 (RTOS) 是一種體積小巧、確定性強的計算機…

文件包含漏洞第一關

一、什么是文件包含漏洞 1.文件包含漏洞概述 和SQL注入等攻擊方式一樣,文件包含漏洞也是一種注入型漏洞,其本質就是輸入一段用戶能夠控制的腳本或者代碼,并讓服務端執行。 什么叫包含呢?以PHP為例,我們常常把可重復使…

瑞芯微RK3576(1)-硬件設計

過年期間,趁著放假時間做了一款3576的核心板 方案是2G DDR432G emmc 引出所有IO口 關于接口方面,考慮了一段時間,最終決定使用BTB的模式,主要是能夠出更多的IO,方便拆卸,最讓我擔心的是BTB的位置問題 為了…

Java 大視界 -- Java 大數據在智能醫療藥品研發數據分析與決策支持中的應用(126)

💖親愛的朋友們,熱烈歡迎來到 青云交的博客!能與諸位在此相逢,我倍感榮幸。在這飛速更迭的時代,我們都渴望一方心靈凈土,而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識,也…

JWT的學習

1、HTTP無狀態及解決方案 HTTP一種是無狀態的協議,每次請求都是一次獨立的請求,一次交互之后就是陌生人。 以CSDN為例,先登錄一次,然后瀏覽器退出,這個時候在進入CSDN,按理說服務器是不知道你已經登陸了&…

時序和延時

1、延遲模型的類型 verilog有三種類型的延遲模型:分布延遲 、 集總延遲 、 路徑延遲(pin to pin) 1.1、 分布延遲 分布延遲是在每個獨立元件的基礎上進行定義的。 module M(output wire out ,input wire a …

SpringBoot基礎Kafka示例

這里將生產者和消費者放在一個應用中 使用的Boot3.4.3 引入Kafka依賴 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency>yml配置 spring:application:name: kafka-1#kafka…

API調試工具的無解困境:白名單、動態IP與平臺設計問題

引言 你是否曾經在開發中遇到過這樣的尷尬情形&#xff1a;你打開了平臺的API調試工具&#xff0c;準備一番操作&#xff0c;結果卻發現根本無法連接到平臺&#xff1f;別急&#xff0c;問題出在調試工具本身。今天我們要吐槽的就是那些神奇的開放平臺API調試工具&#xff0c;…

多方安全計算(MPC)電子拍賣系統

目錄 一、前言二、多方安全計算(MPC)與電子拍賣系統概述2.1 多方安全計算(MPC)的基本概念2.2 電子拍賣系統背景與需求三、MPC電子拍賣系統設計原理3.1 系統總體架構3.2 電子拍賣中的安全協議3.3 數學與算法證明四、數據加解密模塊設計五、GPU加速與系統性能優化六、GUI設計與系…