一、需求
為預防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
完成!