首頁 > 軟體

GitLab設定crontab定時自動備份

2020-06-16 16:38:58

1:GitLab備份非常簡單,只需要一條命令就可以建立完整的備份

gitlab-rake gitlab:backup:create

使用以上命令,就相當於在/var/opt/gitlab/backups/資料夾下建立了一個類似於1542596619_2018_11_19_9.2.1_gitlab_backup.tar的壓縮檔案,這個壓縮包就是Gitlab所有的完整檔案,1542596619_2018_11_19是備份的日期9.2.1是Gitlab的版本,如果你要從Gitlab遷移至Gitlab,請注意遷移的版本和目前的版本是否一致。

建立完成後,在/var/opt/gitlab/backups/已經建立好備份檔案了

2:更改GitLab備份目錄

當然,你可以通過/etc/gitlab/gitlab.rb來修改備份的目錄

# gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

修改成

gitlab_rails['backup_path'] = "/disk/gitlab/backup"

修改完成之後,使用下面的命令可以重新載入組態檔

gitlab-ctl reconfigure

3:GitLab自動定時備份

在crontab檔案裡面,每一行代表一項任務,每行的每個欄位代表一項設定,它的格式共分為六個欄位,前五段是時間設定段,第六段是要執行的命令段,每個欄位之間用空格分割,沒用的段用*代替,格式如下:

m h dom mon dow user command

其中:

  • m: 表示分鐘,可以是從0到59之間的任何整數。
  • h:表示小時,可以是從0到23之間的任何整數。
  • dom:表示日期,可以是從1到31之間的任何整數。
  • mon:表示月份,可以是從1到12之間的任何整數。
  • dow:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。
  • user : 表示執行的使用者。
  • command:要執行的命令,可以是系統命令,也可以是自己編寫的指令碼檔案(如shell檔案)。

實現每天凌晨2點進行一次自動備份:通過crontab使用備份命令實現,需重新啟動cron服務
方法1、在命令列輸入: crontab -e 然後新增相應的任務,wq存檔退出。

#輸入命令crontab -e
sudo crontab -e  
#輸入相應的任務
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

方法2、直接編輯/etc/crontab 檔案,即vi /etc/crontab,然後新增相應的任務

#編輯 /etc/crontab
vi /etc/crontab 

然後再編輯框內輸入相應的任務

# edited by ouyang 2017-8-11 新增定時任務,每天凌晨兩點,執行gitlab備份
0  2    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

或者直接定時執行一個指令碼 auto_backup.sh ,指令碼內容為

/opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

然後再 /etc/crontab中,新增相關任務定時執行 auto_backup.sh 指令碼檔案

sudo chmod +x auto_backup.sh
sudo vim auto_backup.sh

/etc/crontab 中新增執行指令碼的定時任務,程式碼如下:

#也可以按照如下所示的方法,定時執行 auto_backup.sh指令碼,指令碼內容就填寫: /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1 
0 2    * * *   root    /data/gitlabData/backups/auto_backup.sh -D 1  

編寫完 /etc/crontab 檔案之後,需要重新啟動cron服務

#重新載入cron組態檔
sudo /usr/sbin/service cron reload
#重新啟動cron服務
sudo /usr/sbin/service cron restart 

實際執行如下

root@Ubuntu4146:~# sudo /usr/sbin/service cron reload
root@ubuntu4146:~# sudo /usr/sbin/service cron restart 
cron stop/waiting
cron start/running, process 17738

4:設定備份過期時間

設定只儲存最近7天的備份,編輯 /etc/gitlab/gitlab.rb 組態檔,找到gitlab_rails[‘backup_keep_time’],設定為你想要設定的值,然後儲存。

gitlab_rails['backup_keep_time'] = 604800  

5:GitLb遷移

首先確保,兩個Gitlab的版本是一致的,然後把檔案上傳到新的Giltab伺服器上

賦予備份檔案許可權

chmod 777 1542596619_2018_11_19_9.2.1_gitlab_backup.tar

停止相關的服務

# 停止相關資料連線服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

執行命令從備份中恢復到Gitlab

gitlab-rake gitlab:backup:restore BACKUP=備份檔案編號

比如我們的是1542596619_2018_11_19_9.2.1_gitlab_backup.tar,那編號就是1542596619_2018_11_19_9.2.1

gitlab-rake gitlab:backup:restore BACKUP=1542596619_2018_11_19_9.2.1

然後出現第一個互動頁面

root@ubuntu4146:/var/opt/gitlab/backups# gitlab-rake gitlab:backup:restore BACKUP=1502357536_2017_08_10_9.4.3
Unpacking backup ... done
Before restoring the database we recommend removing all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.

Do you want to continue (yes/no)? 

過程中出現互動頁面,都輸入yes繼續執行,完成後開啟Gitlab服務

sudo gitlab-ctl start

檢視老、新Gitlab服務資料是否一致。


IT145.com E-mail:sddin#qq.com