Linux下自動刪除過期備份和自動異地備份的腳本
每天自動刪除過期備份
首先編寫一個簡單的Shell腳本DeleteExpireBackup.sh:
#!/bin/bash
# 修改需要刪除的路徑
location="/database/backup/"
# 刪除最后修改時間為30天以前的備份文件夾
find $location -mtime +30 -type d | xargs rm -rf {}
-mtime:文件內容最后一次修改的時間,+30代表大于30天的。其他參數可選:- 訪問時間戳(
atime):最后一次讀取文件的時間。 - 更改時間戳 (
ctime):上次更改文件元數據的時間,例如其所有權、位置、文件類型和權限設置。 -type代表文件類型,f代表文件,d代表目錄,l代表軟鏈接文件
腳本編寫并保存后會發(fā)現無法執(zhí)行,因為需要設置文件權限,切換到腳本保存的當前目錄,執(zhí)行下面的命令:
chmod a+x DeleteExpireBackup.sh
腳本準備完畢,然后就是設置自動執(zhí)行時間
我這里偷懶了,直接用的寶塔設置的,其實本質是一樣的,都是用的crontab定時執(zhí)行,不懂的同學自行google。
寶塔設置如下:

設置完成后,點擊添加任務,自動刪除備份就完成了。
有時候執(zhí)行腳本會出現以下錯誤:
/bin/bash^M: 壞的解釋器: 文本文件忙
出現這個錯誤,多半是Windows下編寫的腳本,編寫完畢后傳到服務器上執(zhí)行。
因為Windows系統(tǒng)下換行符為\r\n,linux下換行符為\n,因此在windows下編寫的文件會比linux下多一個回車符號\r。去掉多余的\r 回車符即可。
操作辦法:可以用sed命令進行全局替換 sed 's/\r//' -i 腳本名稱.sh
每天定時異地備份
其余操作和定時刪除大同小異,所以這里我只展示腳本內容:
#!/usr/bin/expect -f
# 獲取當前日期 例如:20220101
set date [ clock format [ clock seconds ] -format "%Y%m%d" ]
# 傳輸用戶名
set username 用戶名
# 密碼
set password 密碼
# expect默認timeout為30S 超過30s未傳輸完會停止,設置為 -1 則不限制超時時間
set timeout -1
# 壓縮 端口 遞歸 需要傳輸的本地絕對路徑 用戶名 目標IP 目標服務器路徑
spawn /usr/bin/scp -C -P 22 -r /database/backup/$date/ $username@192.168.2.2:/database/backup/
expect {
"*yes/no" {send "yes\r";exp_continue}
"*password:" {send "$password\r"}
}
expect eof
腳本是使用 scp 從一個Linux傳送至另一臺Linux服務器來完成異地備份的。
到此這篇關于Linux下自動刪除過期備份和自動異地備份的文章就介紹到這了,更多相關Linux刪除過期備份內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
linux shell實現批量主機遠程執(zhí)行命令腳本
這篇文章主要介紹了linux shell實現批量主機遠程執(zhí)行命令腳本,文章通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-09-09
jenkins 實現shell腳本化定時執(zhí)行任務的方法
這篇文章主要介紹了jenkins 實現shell腳本化定時執(zhí)行任務,解決訪問是jenkins構建好之后將jar遠程推送到生產服務器,提前退出后臺執(zhí)行服務器遠程腳本,腳本通過ngnx提前切走nginx代理auction sleep 1800s,半小時后執(zhí)行更新重啟,具體操作過程跟隨小編一起看看吧2022-01-01

