乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      GitLab從安裝到全自動(dòng)化備份一條龍

       LibraryPKU 2019-11-28

      原文地址[1]歡迎star

      需求

      1.在新服務(wù)器上安裝并搭建好gitlab2.手動(dòng)+自動(dòng)將舊服務(wù)器上的gitlab備份3.手動(dòng)+自動(dòng)將gitlab備份包scp到新服務(wù)器上4.手動(dòng)+自動(dòng)恢復(fù)新服務(wù)器上的gitlab備份包5.在新舊服務(wù)器上自動(dòng)刪除過(guò)期備份包

      前提

      1.版本

      ·gitlab-ce是社區(qū)版·gitlab-ee是企業(yè)版

      1.方案

      ·定時(shí)器執(zhí)行shell腳本

      1.工具

      ·crontab[2]·shell[3]·expect[4]

      1.操作

      ·如果不是root用戶(hù)請(qǐng)?jiān)谒忻钋?sudo·新老服務(wù)器gitlab版本保持一致·舊服務(wù)器用的是gitlab-ee_10.7.2-ee.0_amd64.deb版本的gitlab,示例也選擇這個(gè)企業(yè)版

      1.backups目錄的只有root才能操作的,但是gitlab恢復(fù)操作使用者是git

      所以將新舊服務(wù)器上/var/opt/gitlab/backups文件夾設(shè)置為可讀可寫(xiě)可執(zhí)行,方便操作

      sudo chmod 777 backups/

      現(xiàn)在開(kāi)始,我會(huì)一步一步操作,帶領(lǐng)大家一條龍從安裝到自動(dòng)化備份,最終實(shí)現(xiàn)再也不要被gitlab備份困擾的問(wèn)題且可以專(zhuān)心敲代碼的夢(mèng)想

      在新服務(wù)器上安裝并搭建好gitlab

      1.安裝方式一:官網(wǎng)安裝(慢)2.安裝方式二:國(guó)內(nèi)鏡像安裝(快)

      官網(wǎng)安裝gitlab

      請(qǐng)戳gitlab的官方網(wǎng)站[5]

      由于的我系統(tǒng)是ubuntu,所以我選擇ubuntu 安裝步驟就出現(xiàn)在下面了

      1.

      安裝和配置必須的依賴(lài)

      sudo apt-get updatesudo apt-get install -y curl openssh-server ca-certificates

      2.

      安裝Postfix來(lái)發(fā)送通知郵件。如果你想要用另一個(gè)方式去發(fā)送郵件,請(qǐng)?jiān)趃itlab安裝好后,下一步就是配置一個(gè)額外的SMTP服務(wù)。

      sudo apt-get install -y postfix

      在安裝Postfix時(shí)一個(gè)配置屏幕會(huì)出現(xiàn)。選擇Internet Site并且回車(chē)。mail name為你的服務(wù)器的DNS并且回車(chē)。如果額外的屏幕出現(xiàn),繼續(xù)接受默認(rèn)配置并且回車(chē)。

      3.

      添加gitlab安裝包倉(cāng)庫(kù)并安裝 添加gitlab包倉(cāng)庫(kù)

      curl https://packages./install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

      4.

      安裝gitlab包。選擇https://gitlab.更改為要訪(fǎng)問(wèn)gitlab實(shí)例的url。安裝將自動(dòng)配置并啟動(dòng)gitlab到url。

      為了https://gitlab將自動(dòng)請(qǐng)求帶有Let's Encrypt的證書(shū),這需要入棧http訪(fǎng)問(wèn)和有效的主機(jī)名。

      sudo EXTERNAL_URL='https://gitlab.' apt-get install gitlab-ee

      此時(shí)你會(huì)發(fā)現(xiàn)慢的要死,速度是100k/s,畢竟兩者隔了一堵墻,那就換國(guó)內(nèi)鏡像安裝吧

      清華鏡像安裝gitlab

      既然官網(wǎng)太慢,那么我們選擇清華鏡像安裝gitlab

      清華大學(xué)開(kāi)源軟件鏡像站[6]

      Gitlab Community Edition 鏡像使用幫助[7]

      里面有各種版本

      備份需要和原服務(wù)器的gitlab版本一致,否則無(wú)法安裝

      在搜索欄里搜索gitlab,就會(huì)跳出相關(guān)gitlab的版本

      gitlab-ee_10.7.2-ee.0_amd64.deb版本在/ubuntu/pool/bionic/main/g/gitlab-ee/

      或者是直接訪(fǎng)問(wèn)到gitlab-ee[8]版本下,

      直接訪(fǎng)問(wèn)到gitlab-ce[9]版本下。

      1.

      先更新倉(cāng)庫(kù)

      sudo apt-get update

      2.

      加入gitlab的GPG公鑰

      curl https://packages./gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null

      3.

      寫(xiě)進(jìn)再選擇你的 Debian/Ubuntu 版本

      文本框中內(nèi)容寫(xiě)進(jìn)/etc/apt/sources.list.d/gitlab-ce.list,

      我是寫(xiě)進(jìn)/etc/apt/sources.list.d/gitlab-ee.list,

      寫(xiě)deb https://mirrors.tuna./gitlab-ee/ubuntu xenial main

      1.更新apt倉(cāng)庫(kù),安裝 gitlab-ee

      sudo apt-get updatesudo apt-get install gitlab-ee=10.7.2-ee.0

      下載gitlab-ee_10.7.2-ee.0

      這樣就安裝了10.7.2-ee.0版本了。

      配置并啟動(dòng)gitlab

      sudo gitlab-ctl reconfigure

      每當(dāng)修改了GitLab的配置之后,都要執(zhí)行如下的命令,重啟配好的配置并重啟GitLab,然后查看GitLab的狀態(tài)

      sudo gitlab-ctl reconfiguresudo gitlab-ctl restartsudo gitlab-ctl status

      打開(kāi)瀏覽器,默認(rèn)是訪(fǎng)問(wèn)http://localhost即可。如果改了ip和端口,則訪(fǎng)問(wèn)http://ip:端口既可

      這就是新搭建的gitlab

      安裝gitlab出現(xiàn)的問(wèn)題

      斷口被占用

      端口80以及端口8080分別被Ubuntu服務(wù)器上的Apache、Tomcat和nginx等服務(wù)所占用。

      我的做法是修改 /etc/gitlab/gitlab.rb 文件

      vim /etc/gitlab/gitlab.rb

      修改其中的external_url

      手動(dòng)將舊服務(wù)器上的gitlab備份

      修改gitlab備份地址

      備份地址默認(rèn)是在var/opt/gitlab/backups

      1.打開(kāi)原gitlab服務(wù)器終端,通過(guò)修改gitlab.rb配置文件來(lái)修改默認(rèn)存放備份文件的目錄

      sudo vim /etc/gitlab/gitlab.rb

      1.

      默認(rèn)如下

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

      2.

      backup_path改為自定義的目錄

      gitlab_rails['backup_path'] = '/data/gitlab/backups'

      1.修改后重啟配置文件

      sudo gitlab-ctl reconfigure

      我的示例里是沒(méi)有改,備份的時(shí)間倒是改成了7天

      /etc/gitlab/gitlab.rb

      external_url 'http://192.168.3.2'unicorn['port'] = 10086gitlab_rails['manage_backup_path']=truegitlab_rails['backup_path']='var/opt/gitlab/backups'gitlab_rails['backup_archive_permissions']=0644gitlab_rails['backup_keep_time']=604800

      重啟配置出現(xiàn)的問(wèn)題

      出現(xiàn)這個(gè)radis的問(wèn)題,不知道如何解決,有大佬知道,求告知,但是不影響備份

      這個(gè)問(wèn)題是由于,我執(zhí)行了sudo chmod -R 777 gitlab的命令,將gitlab的子目錄下的所有文件都賦予了可讀可寫(xiě)可執(zhí)行的權(quán)限

      解決方式

      sudo chmod -R 2770 /var/opt/gitlab/git-data/repositories

      gitlab開(kāi)始備份

      通過(guò)命令來(lái)備份原服務(wù)器上gitlab的數(shù)據(jù)。

      sudo gitlab-rake gitlab:backup:create

      備份的文件會(huì)放在var/opt/gitlab/backups下,名稱(chēng)類(lèi)似于1558509153_2019_05_22_10.7.2-ee_gitlab_backup.tar,這個(gè)壓縮包包含了gitlab備份的時(shí)間和版本。

      可以看到backups下面的備份包

      手動(dòng)將gitlab備份包scp到新服務(wù)器上

      通過(guò)scp命令

      將新服務(wù)器上的backups權(quán)限升到777

      sudo chmod 777 backups/

      不會(huì)請(qǐng)戳Linux scp命令[1]

      scp 1559635752_2019_06_04_10.7.2-ee_gitlab_backup.tar  gitlab-backup@192.168.3.113:/var/opt/gitlab/backups

      在新服務(wù)器中/var/opt/gitlab/backups下就出現(xiàn)了新的備份包

      重啟發(fā)現(xiàn)所有備份包和腳本都清除的問(wèn)題

      之前由于backups權(quán)限問(wèn)題,我將備份包發(fā)送到/tmp目錄下,

      重啟電腦時(shí),linux自動(dòng)清除/tmp文件夾下的內(nèi)容

      原因是tmp是一個(gè)特殊的文件夾,系統(tǒng)會(huì)自動(dòng)清理,所以大家最好不要把文件放到這個(gè)地方,被清理了就不好了。

      手動(dòng)恢復(fù)新服務(wù)器上的gitlab備份包

      修改備份文件權(quán)限

      如果沒(méi)有修改backups目錄的權(quán)限,會(huì)出現(xiàn)下面問(wèn)題

      貿(mào)然恢復(fù),就會(huì)出現(xiàn)以下錯(cuò)

      正確操作是降低backups操作權(quán)限


      sudo chown git backups/sudo chmod 700 backups/

      不要降低權(quán)限,不然文件夾進(jìn)不去 操作是降低backups操作權(quán)限 為了避免gitlab恢復(fù)時(shí),由于權(quán)限,而產(chǎn)生不能解壓的問(wèn)題,我們就將備份文件權(quán)限改為777(可讀可寫(xiě))

      chmod 777 1558509153_2019_05_22_10.7.2-ee_gitlab_backup.tar

      停止相關(guān)數(shù)據(jù)連接服務(wù)

      sudo gitlab-ctl stop unicornsudo gitlab-ctl stop sidekiq

      從備份文件恢復(fù)gitlab

      BACKUP等于gitlab版本號(hào),_gitlab_backup.tar是會(huì)默認(rèn)添加的

      sudo gitlab-rake gitlab:backup:restore BACKUP=1558509153_2019_05_22_10.7.2-ee

      安裝開(kāi)始,一共有兩個(gè)交互

      1.是否丟掉之前的倉(cāng)庫(kù)

      1.是否丟掉之前的key文件

      3 安裝成功

      開(kāi)啟gitlab,并訪(fǎng)問(wèn)

      sudo gitlab-ctl start

      打開(kāi)瀏覽器,訪(fǎng)問(wèn)gitlab

      自動(dòng)將舊服務(wù)器上的gitlab備份

      舊服務(wù)器上的/var/opt/gitlab目錄

      定時(shí)備份

      添加定時(shí)任務(wù),每天凌晨6點(diǎn)執(zhí)行g(shù)itlab備份

      # 仇飛鴻編輯于2019-5-30 添加定時(shí)任務(wù),每天6點(diǎn),自動(dòng)執(zhí)行將舊服務(wù)器上的gitlab備份操作0  6    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

      編寫(xiě)完 /etc/crontab 文件之后,需要重新啟動(dòng)cron服務(wù)

      #重新加載cron配置文件sudo /usr/sbin/service cron reload#重啟cron服務(wù)sudo /usr/sbin/service cron restart

      注意:6之前是0,而不是* 最后需要重新啟動(dòng)cron服務(wù)

      設(shè)置備份過(guò)期時(shí)間

      就算是每天6點(diǎn)備份,一年下來(lái)也有356份,那也不得了了

      那就可以設(shè)置備份過(guò)期時(shí)間,備份目錄下只保存還沒(méi)過(guò)期的壓縮包,大大減輕了服務(wù)器的壓力

      通過(guò)編輯/etc/gitlab/gitlab.rb配置文件,找到gitlab_rails[‘backup_keep_time’]

      sudo vim /etc/gitlab/gitlab.rb

      gitlab_rails[‘backup_keep_time’]改為gitlab_rails[‘backup_keep_time’]=604800

      我設(shè)置了7天內(nèi)不過(guò)期

      自動(dòng)將gitlab備份包scp到新服務(wù)器上

      新舊服務(wù)器配對(duì)密鑰

      由于scp總是出現(xiàn)交互,提示輸入密碼

      方案一:配對(duì)密碼,取消密碼

      方案二:expect自動(dòng)交互

      這里我們采取方案一

      生成密鑰對(duì)

      在舊服務(wù)器上,輸入命令

      ssh-keygen -t rsa

      1.生成的過(guò)程中提示輸入密鑰對(duì)保存位置,直接回車(chē),接受默認(rèn)值就行了。2.因?yàn)橹耙呀?jīng)有/root/.ssh/id_rsa 文件存在,因此提示你是否覆蓋,輸入y表示覆蓋3.接著會(huì)提示輸入一個(gè)密碼,直接回車(chē),讓它空著。當(dāng)然,也可以輸入一個(gè)密碼。4.接著輸入確認(rèn)密碼,輸入完之后,回車(chē)密鑰對(duì)就生成完了。

      在/root/.ssh下生成id_rsa 和 id_rsa.pub 兩個(gè)文件, 其中公共密鑰保存在 /root/.ssh/id_rsa.pub,私有密鑰保存在/root/.ssh/id_rsa。

      cd /home/gushenxing/.ssh/

      在舊服務(wù)器上cp生成rsa公鑰證書(shū)給新服務(wù)器

      然后在/root/.ssh下復(fù)制備份一份id_rsa.pub 命名為 id_rsa.pub.A,以便拷貝到新服務(wù)器。

      執(zhí)行cp命令復(fù)制

      cp id_rsa.pub id_rsa.pub.A

      執(zhí)行scp命令傳輸

      scp id_rsa.pub.A gitlab-backup@192.168.3.113:/home/gitlab-backup/.ssh

      進(jìn)入新服務(wù)器查看公鑰

      這里使用scp命令需要輸入密碼,當(dāng)我們把下面的第三步執(zhí)行完畢之后,以后舊服務(wù)器使用scp命令復(fù)制文件到新服務(wù)器的話(huà),就不需要再次輸入密碼。

      密鑰配對(duì)

      創(chuàng)建authorized_keys文件

      當(dāng)?shù)诙綄⑴f服務(wù)器上的id_rsa.pub.A 文件copy到新服務(wù)器的目錄/root/.ssh

      我們?cè)谛路?wù)器的/root/.ssh下創(chuàng)建authorized_keys文件,使用如下命令

      touch authorized_keys

      將id_rsa.pub.A文件內(nèi)容追加到authorized_keys 文件中

      cat id_rsa.pub.A >> authorized_keys

      打開(kāi)authorized_keys查看

      修改authorized_keys文件的權(quán)限

      修改authorized_keys文件的權(quán)限

      authorized_keys文件的權(quán)限很重要,如果設(shè)置為777,那么登錄的時(shí)候,還是需要提供密碼的。

      這個(gè)權(quán)限足夠,越低越好

      -rw-rw-r-- 1 gitlab-backup gitlab-backup 403 7月 19 10:53 authorized_keys

      或者是這個(gè)權(quán)限

      測(cè)試

      在舊服務(wù)器上使用scp命令復(fù)制文件到新服務(wù)器上是否還需要密碼

      scp 1559635752_2019_06_04_10.7.2-ee_gitlab_backup.tar gitlab-backup@192.168.3.113:/var/opt/gitlab/backups

      在新服務(wù)器上,再次使用剛才的命令,發(fā)現(xiàn)已經(jīng)可以不需要輸入密

      創(chuàng)建Shell定時(shí)遠(yuǎn)程備份腳本

      在舊服務(wù)器上創(chuàng)建定時(shí)遠(yuǎn)程備份腳本

      創(chuàng)建自動(dòng)scp的腳本和日志目錄

      cd /var/opt/gitlabtouch auto_scp.shcd /backupssudo mkdir log

      因?yàn)榈綍r(shí)候,我們會(huì)將該定時(shí)遠(yuǎn)程備份腳本auto_scp.sh執(zhí)行的時(shí)間,放到Gitlab自動(dòng)備份腳本auto_scp.sh之后的一小時(shí)之內(nèi),因此我們只需要每次執(zhí)行遠(yuǎn)程備份腳本auto_scp.sh的時(shí)候,只需要cp一個(gè)小時(shí)之內(nèi)的生成的新的Gitlab備份文件。

      auto_scp.sh

      #!/bin/bash
      # 新舊服務(wù)器 gitlab備份文件存放路徑 BACKUPDIR=/var/opt/gitlab/backups
      # 遠(yuǎn)程備份服務(wù)器 登錄賬戶(hù) RemoteUser=gitlab-backup
      # 遠(yuǎn)程備份服務(wù)器 IP地址 RemoteIP=192.168.3.113
      #當(dāng)前系統(tǒng)日期 DATE=`date '+%Y-%m-%d-%H-%M-%S'`
      #Log存放路徑LogFile=$BACKUPDIR/log/$DATE.log
      #查找本地備份目錄下時(shí)間為1天之內(nèi)并且后綴為.tar的gitlab備份文件BACKUPFILE_SEND_TO_REMOTE=$(find $BACKUPDIR -type f -mmin -1440 -name '*.tar')
      #新建日志文件touch $LogFile
      #追加日志到日志文件echo '---------------------------------開(kāi)始-----------------------------------' >> $LogFile
      echo 'gitlab auto backup to remote server, start at $DATE' >> $LogFile
      echo '---------------------------------分割線(xiàn)---------------------------------' >> $LogFile
      #輸出日志,打印出每次scp的文件名echo 'the file to scp to remote server is $BACKUPFILE_SEND_TO_REMOTE' >> $LogFile
      #備份到遠(yuǎn)程服務(wù)器scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$BACKUPDIRecho '---------------------------------分割線(xiàn)---------------------------------' >> $LogFile
      echo 'remote server is $RemoteUser@$RemoteIP:$BACKUPDIR' >> $LogFile
      #追加日志到日志文件echo '---------------------------------結(jié)束-----------------------------------' >> $LogFile~

      測(cè)試

      由于auto_scp.sh執(zhí)行權(quán)限是root,所以還得要交互密

      降低auto_scp.sh和log的權(quán)限

      sudo chown gushenxing:gushenxing auto_scp.sh sudo chown gushenxing:gushenxing log

      1.

      執(zhí)行命令,不要sudo執(zhí)行

      bash auto_scp.sh

      此時(shí)不需要密碼

      2.

      查看日志文件

      3.

      發(fā)現(xiàn)新服務(wù)器上已經(jīng)出現(xiàn)了備份

      往crontab添加定時(shí)任務(wù),自動(dòng)執(zhí)行scp腳本

      sudo vim /etc/crontab

      添加下面命令

      # 仇飛鴻編輯于2019-6-04 添加定時(shí)任務(wù),每天7點(diǎn),自動(dòng)執(zhí)行將gitlab備份包scp到新服務(wù)器上的操作0  7    * * *   gushenxing   bash /var/opt/gitlab/auto_scp.sh

      編寫(xiě)完 /etc/crontab 文件之后,需要重新啟動(dòng)cron服務(wù)

      #重新加載cron配置文件sudo /usr/sbin/service cron reload#重啟cron服務(wù)sudo /usr/sbin/service cron restart

      舊服務(wù)器上的操作已結(jié)束,完成了自動(dòng)將舊服務(wù)器上的gitlab備份和自動(dòng)將gitlab備份包scp到新服務(wù)器上

      自動(dòng)恢復(fù)新服務(wù)器上的gitlab備份包

      自動(dòng)刪除過(guò)期備份包腳本

      cd /var/opt/gitlabsudo touch auto_remove_backup.sh

      填寫(xiě)腳本代碼

      #!/bin/bash
      #遠(yuǎn)程備份服務(wù)器gitlab備份文件存放路徑GITLABDIR=/var/opt/gitlab/backups
      # 查找遠(yuǎn)程備份路徑下,超過(guò)7天且文件后綴為.tar的gitlab備份文件,然后刪除find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;

      往crontab添加定時(shí)任務(wù),自動(dòng)執(zhí)行刪除備份包腳本

      sudo vim /etc/crontab

      添加下面命令

      # 仇飛鴻編輯于2019-5-30 添加定時(shí)任務(wù),每天上午8點(diǎn),自動(dòng)執(zhí)行刪除過(guò)期的gitlab備份文件操作0 8 * * * root bash /var/opt/gitlab/auto_remove_backup.sh

      編寫(xiě)完 /etc/crontab 文件之后,需要重新啟動(dòng)cron服務(wù)

      #重新加載cron配置文件sudo /usr/sbin/service cron reload#重啟cron服務(wù)sudo /usr/sbin/service cron restart

      自動(dòng)恢復(fù)腳本

      cd /var/opt/gitlabsudo touch auto_recovery_backup.sh
      #!/bin/bash
      #備份文件所在目錄REMOTEDIRBACKUPS=/var/opt/gitlab/backups
      #找到當(dāng)日生成的備份文件BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')
      #當(dāng)前系統(tǒng)日期 DATE=`date '+%Y-%m-%d-%H-%M-%S'`
      #Log存放路徑LogFile=$REMOTEDIRBACKUPS/log/$DATE.log
      #新建日志文件sudo touch $LogFile
      #追加日志到日志目錄echo '---------------------------------開(kāi)始-----------------------------------' >> $LogFile
      echo 'gitlab auto recovery, start at $DATE' >> $LogFile
      echo '---------------------------------分割線(xiàn)---------------------------------' >> $LogFile
      #輸出日志,打印出當(dāng)日生成的備份文件echo 'backup files generated on that day is $BACKUPFILE' >> $LogFile

      #截取出主要文件名FILE=$(echo ${BACKUPFILE#*backups/})
      #截取恢復(fù)文件名RESTOREFILE=$(echo ${FILE%_gitlab*})


      echo '---------------------------------分割線(xiàn)---------------------------------' >> $LogFile
      #輸出日志,打印出備份文件復(fù)制目標(biāo)目錄echo 'backup files generated scp to $REMOTEDIRBACKUPS' >> $LogFile
      #進(jìn)入到目標(biāo)目錄cd $REMOTEDIRBACKUPS
      #備份文件權(quán)限修改為可讀可寫(xiě)可執(zhí)行chmod 777 $FILE
      #停止相關(guān)數(shù)據(jù)連接服務(wù)sudo gitlab-ctl stop unicornsudo gitlab-ctl stop sidekiq
      #自動(dòng)化交互,從備份文件恢復(fù)gitlabsudo /usr/bin/expect -c ' set timeout -1spawn sudo gitlab-rake gitlab:backup:restore BACKUP=$RESTOREFILEexpect {\'yes/no\' {set timeout -1; send \'yes\n\';exp_continue;}\'yes/no\' {set timeout -1; send \'yes\n\'}}
      expect eof'#開(kāi)啟gitlabsudo gitlab-ctl start
      echo '---------------------------------分割線(xiàn)---------------------------------' >> $LogFile
      #輸出日志,從備份文件恢復(fù)gitlabecho 'recovery was successful' >> $LogFile
      #追加日志到日志目錄echo '---------------------------------結(jié)束-----------------------------------' >> $LogFile

      其中加入自動(dòng)交互expect

      測(cè)試

      執(zhí)行結(jié)果

      往crontab添加定時(shí)任務(wù),自動(dòng)執(zhí)行恢復(fù)備份包腳本

      sudo vim /etc/crontab

      在crontab中加入此定時(shí)任務(wù)

      # 仇飛鴻編輯于2019-6-3 添加定時(shí)任務(wù),每天上午9點(diǎn),自動(dòng)執(zhí)行從備份包中恢復(fù)gitlab操作0  9    * * *   root    bash /var/opt/gitlab/auto_recovery_backup.sh

      編寫(xiě)完 /etc/crontab 文件之后,需要重新啟動(dòng)cron服務(wù)

      #重新加載cron配置文件sudo /usr/sbin/service cron reload#重啟cron服務(wù)sudo /usr/sbin/service cron restart

      完整版腳本

      舊服務(wù)器上的crontab腳本

      # /etc/crontab: system-wide crontab# Unlike any other crontab you don't have to run the `crontab'# command to install the new version when you edit this file# and files in /etc/cron.d. These files also have username fields,# that none of the other crontabs do.
      SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
      # m h dom mon dow user command17 * * * * root cd / && run-parts --report /etc/cron.hourly25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )# 仇飛鴻編輯于2019-5-30 添加定時(shí)任務(wù),每天6點(diǎn),自動(dòng)執(zhí)行將舊服務(wù)器上的gitlab備份>操作0 6 * * * root /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
      # 仇飛鴻編輯于2019-6-04 添加定時(shí)任務(wù),每天7點(diǎn),自動(dòng)執(zhí)行將gitlab備份包scp到新服務(wù)器上的操作0 7 * * * gushenxing bash /var/opt/gitlab/auto_scp.sh
      #

      新服務(wù)器上的crontab腳本

      # /etc/crontab: system-wide crontab# Unlike any other crontab you don't have to run the `crontab'# command to install the new version when you edit this file# and files in /etc/cron.d. These files also have username fields,# that none of the other crontabs do.
      SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
      # m h dom mon dow user command17 * * * * root cd / && run-parts --report /etc/cron.hourly25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
      # 仇飛鴻編輯于2019-5-30 添加定時(shí)任務(wù),每天上午8點(diǎn),自動(dòng)執(zhí)行刪除過(guò)期的gitlab備份文件操作0 8 * * * root bash /var/opt/gitlab/auto_remove_backup.sh
      # 仇飛鴻編輯于2019-6-3 添加定時(shí)任務(wù),每天上午9點(diǎn),自動(dòng)執(zhí)行從備份包中恢復(fù)gitlab操>作0 9 * * * root bash /var/opt/gitlab/auto_recovery_backup.sh
      # 仇飛鴻編輯于2019-6-12 添加定時(shí)任務(wù),每天上午10點(diǎn),自動(dòng)刪除var/opt/gitlab/backups/tmp0 10 * * * root rm -rf /var/opt/gitlab/backups/tmp

      自動(dòng)將gitlab備份包scp到新服務(wù)器腳本auto_scp.sh

      #!/bin/bash


      # 新舊服務(wù)器 gitlab備份文件存放路徑
      BACKUPDIR=/var/opt/gitlab/backups


      # 遠(yuǎn)程備份服務(wù)器 登錄賬戶(hù)
      RemoteUser=gitlab-backup


      # 遠(yuǎn)程備份服務(wù)器 IP地址
      RemoteIP=192.168.3.113


      #當(dāng)前系統(tǒng)日期
      DATE=`date '+%Y-%m-%d-%H-%M-%S'`


      #Log存放路徑
      LogFile=$BACKUPDIR/log/$DATE.log


      #查找本地備份目錄下時(shí)間為1天之內(nèi)并且后綴為.tar的gitlab備份文件
      BACKUPFILE_SEND_TO_REMOTE=$(find $BACKUPDIR -type f -mmin -1440 -name '*.tar')


      #新建日志文件
      touch $LogFile


      #追加日志到日志文件
      echo '---------------------------------開(kāi)始-----------------------------------' >> $LogFile


      echo 'gitlab auto backup to remote server, start at $DATE' >> $LogFile


      echo '---------------------------------分割線(xiàn)---------------------------------' >> $LogFile


      echo 'remote server is $RemoteUser@$RemoteIP:$BACKUPDIR' >> $LogFile


      #追加日志到日志文件
      echo '---------------------------------結(jié)束-----------------------------------' >> $LogFile

      自動(dòng)執(zhí)行刪除過(guò)期的gitlab備份文件腳本auto_remove_backup.sh

      #!/bin/bash
      #遠(yuǎn)程備份服務(wù)器gitlab備份文件存放路徑GITLABDIR=/var/opt/gitlab/backups
      # 查找遠(yuǎn)程備份路徑下,超過(guò)7天且文件后綴為.tar的gitlab備份文件,然后刪除find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;

      自動(dòng)執(zhí)行從備份包中恢復(fù)gitlab腳本auto_recovery_backup.sh

      #!/bin/bash


      #備份文件所在目錄
      REMOTEDIRBACKUPS=/var/opt/gitlab/backups


      #找到當(dāng)日生成的備份文件
      BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')

      #當(dāng)前系統(tǒng)日期
      DATE=`date '+%Y-%m-%d-%H-%M-%S'`


      #Log存放路徑
      LogFile=$REMOTEDIRBACKUPS/log/$DATE.log


      #新建日志文件
      sudo touch $LogFile


      #追加日志到日志目錄
      echo '---------------------------------開(kāi)始-----------------------------------' >> $LogFile


      echo 'gitlab auto recovery, start at $DATE' >> $LogFile


      echo '---------------------------------分割線(xiàn)---------------------------------' >> $LogFile


      #輸出日志,打印出當(dāng)日生成的備份文件
      echo 'backup files generated on that day is $BACKUPFILE' >> $LogFile

      #截取出主要文件名
      FILE=$(echo ${BACKUPFILE#*backups/})
      #截取恢復(fù)文件名
      RESTOREFILE=$(echo ${FILE%_gitlab*})

      echo '---------------------------------分割線(xiàn)---------------------------------' >> $LogFile


      #輸出日志,打印出備份文件復(fù)制目標(biāo)目錄
      echo 'backup files generated scp to $REMOTEDIRBACKUPS' >> $LogFile


      #進(jìn)入到目標(biāo)目錄
      cd $REMOTEDIRBACKUPS
      #備份文件權(quán)限修改為可讀可寫(xiě)可執(zhí)行
      chmod 777 $FILE
      #停止相關(guān)數(shù)據(jù)連接服務(wù)
      sudo gitlab-ctl stop unicorn
      sudo gitlab-ctl stop sidekiq
      #自動(dòng)化交互,從備份文件恢復(fù)gitlab
      sudo /usr/bin/expect -c '
      set timeout -1
      spawn sudo gitlab-rake gitlab:backup:restore BACKUP=$RESTOREFILE
      expect {
      \'yes/no\' {set timeout -1; send \'yes\n\';exp_continue;}
      \'yes/no\' {set timeout -1; send \'yes\n\'}
      }
      expect eof'
      #開(kāi)啟gitlab
      sudo gitlab-ctl start
      echo '---------------------------------分割線(xiàn)---------------------------------' >> $LogFile
      #輸出日志,從備份文件恢復(fù)gitlab

      echo 'recovery was successful' >> $LogFile
      #追加日志到日志目錄
      echo '---------------------------------結(jié)束-----------------------------------' >> $LogFile


      參考文獻(xiàn)

      gitlab官網(wǎng)[2]

      ubuntu16.04中g(shù)itlab安裝[3]

      gitlab自動(dòng)備份[4]

      【git學(xué)習(xí)】在CenterOS系統(tǒng)上恢復(fù)GitLab時(shí)出現(xiàn)錯(cuò)誤:tar: 由于前次錯(cuò)誤,將以上次的錯(cuò)誤狀態(tài)退出 unpacking backup failed[5]

      如何查看 GitLab 版本號(hào)[6]

      Linux上Gitlab卸載[7]

      git學(xué)習(xí)------> Gitlab如何進(jìn)行備份恢復(fù)與遷移?[8]

      【git學(xué)習(xí)】在CenterOS系統(tǒng)上安裝GitLab并自定義域名訪(fǎng)問(wèn)GitLab管理頁(yè)面[9]

      linux權(quán)限補(bǔ)充:rwt rwT rws rwS 特殊權(quán)限[10]

      References

      [1] Linux scp命令: https://www.runoob.com/linux/linux-comm-scp.html
      [2] gitlab官網(wǎng): https://about./install/#ubuntu
      [3] ubuntu16.04中g(shù)itlab安裝: https://blog.csdn.net/weixin_38883338/article/details/82153402
      [4] gitlab自動(dòng)備份: https://www.jianshu.com/p/a176789fef21
      [5] 【git學(xué)習(xí)】在CenterOS系統(tǒng)上恢復(fù)GitLab時(shí)出現(xiàn)錯(cuò)誤:tar: 由于前次錯(cuò)誤,將以上次的錯(cuò)誤狀態(tài)退出 unpacking backup failed: https://www.jianshu.com/p/8a287f31a646
      [6] 如何查看 GitLab 版本號(hào): https://blog.csdn.net/wo18237095579/article/details/81106150
      [7] Linux上Gitlab卸載: https://www.jianshu.com/p/e2e98c45c244
      [8] git學(xué)習(xí)------> Gitlab如何進(jìn)行備份恢復(fù)與遷移?: https://blog.csdn.net/ouyang_peng/article/details/77070977
      [9] 【git學(xué)習(xí)】在CenterOS系統(tǒng)上安裝GitLab并自定義域名訪(fǎng)問(wèn)GitLab管理頁(yè)面: https://blog.csdn.net/ouyang_peng/article/details/72903221
      [10] linux權(quán)限補(bǔ)充:rwt rwT rws rwS 特殊權(quán)限: https://www.cnblogs.com/qlwy/archive/2011/06/26/2121919.html

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多