gitlab自動定時備份檔案,備份失敗傳送郵件

包子wxl發表於2024-06-16

一、需求

為預防gitlab出現故障,每天定時備份,備份完成後把之前的備份檔案刪除,備份成功或失敗的時候自動傳送郵件提醒,這裡的gitlab為docker部署。

二、備份命令準備

1)備份命令

建立一個 gitlab_auto_backup.sh檔案,檔案內容

#!/bin/bash

# 進入GitLab容器並執行備份 --gitlab為docker名稱
docker exec -t gitlab gitlab-backup create

# 查詢並刪除1天前的備份檔案 /home/gitlab/opt/backups/ 為docker掛載data的目錄
find /home/gitlab/opt/backups/ -type f -mtime +1 -name "*.tar" -exec rm -rf {} \;

把gitlab_auto_backup.sh檔案放到伺服器上,這裡放到目錄 /home/gitlab/gitlab_auto_backup.sh

給許可權

chmod +x /home/gitlab/gitlab_auto_backup.sh

2)讓備份命令定時自動執行

使用linux的cron來定時執行上面建立的命令指令碼檔案,vi /etc/crontab 開啟 crontab檔案

每天零晨2點執行

3)linux伺服器郵件傳送配置

配置傳送郵件服務

安裝mailx sendmail,如果已安裝會提示已經安裝,沒安裝會自動安裝

yum install -y mailx sendmail

檢視Active的狀態

systemctl status sendmail

如果active(running)正常,如果為dead則需要啟動服務,啟動命令

systemctl start sendmail

配置服務 /etc/mail.rc,以163郵箱為例

#開啟配置檔案
vi /etc/mail.rc

編輯配置檔案增加配置

set from=xxxx@163.com #郵箱
set smtp=smtp.163.com #smtp地址
set smtp-auth-user=xxxx@163.com
set smtp-auth-password=授權碼 #不是郵件的密碼,是申請smpt傳送郵件的授權碼
set smtp-auth=login

郵件傳送測試

1、直接傳送內容

傳送內容:test content

標題:test title

收件人:123456@qq.com

echo "test content" | mail -s "test title" 123456@qq.com

2、使用檔案內容作為郵件內容傳送

把 /tmp/test.txt的內容作為郵件內容傳送

mail -s "test title" 123456@qq.com < /tmp/test.txt

4)備份成功失敗傳送郵件

修改備份命令,增加傳送郵件。gitlab_auto_backup.sh完整內容替換為:

#!/bin/bash

# 進入GitLab容器並執行備份
docker exec -t gitlab gitlab-backup create

# $?符號顯示上一條命令的返回值,如果為0則代表執行成功,其他表示失敗,注間中括號前後有一個空格
if [ $? -eq 0 ];then
   echo "gitlab備份成功" | mail -s "gitlab備份成功" 123456@qq.com
else
   echo "gitlab備份失敗" | mail -s "gitlab備份失敗" 123456@qq.com
fi
# 查詢並刪除1天前的備份檔案
find /home/gitlab/opt/backups/ -type f -mtime +1 -name "*.tar" -exec rm -rf {} \;

手動執行gitlab_auto_backup.sh檔案測試效果

#執行備份命令
/home/gitlab/gitlab_auto_backup.sh

完成!

相關文章