jstack 脚本 自动日志_GitLab从安装到全自动化备份一条龙

b58e798e934d07ec60de92632a79958f.png

原文地址[1]欢迎star

需求

1.在新服务器上安装并搭建好gitlab2.手动+自动将旧服务器上的gitlab备份3.手动+自动将gitlab备份包scp到新服务器上4.手动+自动恢复新服务器上的gitlab备份包5.在新旧服务器上自动删除过期备份包

前提

1.版本

•gitlab-ce是社区版•gitlab-ee是企业版

1.方案

•定时器执行shell脚本

1.工具

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

1.操作

•如果不是root用户请在所有命令前+sudo•新老服务器gitlab版本保持一致•旧服务器用的是gitlab-ee_10.7.2-ee.0_amd64.deb版本的gitlab,示例也选择这个企业版

1.backups目录的只有root才能操作的,但是gitlab恢复操作使用者是git

所以将新旧服务器上/var/opt/gitlab/backups文件夹设置为可读可写可执行,方便操作

sudo chmod 777 backups/

现在开始,我会一步一步操作,带领大家一条龙从安装到自动化备份,最终实现再也不要被gitlab备份困扰的问题且可以专心敲代码的梦想

在新服务器上安装并搭建好gitlab

1.安装方式一:官网安装(慢)2.安装方式二:国内镜像安装(快)

官网安装gitlab

请戳gitlab的官方网站[5]

714c2772d60e29ad8a3e8258fd4906cb.png

由于的我系统是ubuntu,所以我选择ubuntu 安装步骤就出现在下面了

1.

安装和配置必须的依赖

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

2.

安装Postfix来发送通知邮件。如果你想要用另一个方式去发送邮件,请在gitlab安装好后,下一步就是配置一个额外的SMTP服务。

sudo apt-get install -y postfix

在安装Postfix时一个配置屏幕会出现。选择Internet Site并且回车。mail name为你的服务器的DNS并且回车。如果额外的屏幕出现,继续接受默认配置并且回车。

3.

添加gitlab安装包仓库并安装 添加gitlab包仓库

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

4.

安装gitlab包。选择https://gitlab.example.com更改为要访问gitlab实例的url。安装将自动配置并启动gitlab到url。

为了https://gitlab将自动请求带有Let's Encrypt的证书,这需要入栈http访问和有效的主机名。

sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee

此时你会发现慢的要死,速度是100k/s,毕竟两者隔了一堵墙,那就换国内镜像安装吧

清华镜像安装gitlab

既然官网太慢,那么我们选择清华镜像安装gitlab

清华大学开源软件镜像站[6]

d6aa8aa7c3b37fbccf9372eb41ec8827.png

Gitlab Community Edition 镜像使用帮助[7]

里面有各种版本

备份需要和原服务器的gitlab版本一致,否则无法安装

在搜索栏里搜索gitlab,就会跳出相关gitlab的版本

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

或者是直接访问到gitlab-ee[8]版本下,

直接访问到gitlab-ce[9]版本下。

1.

先更新仓库

sudo apt-get update

2.

加入gitlab的GPG公钥

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

3.

写进再选择你的 Debian/Ubuntu 版本

文本框中内容写进/etc/apt/sources.list.d/gitlab-ce.list,

我是写进/etc/apt/sources.list.d/gitlab-ee.list,

deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/ubuntu xenial main

1.更新apt仓库,安装 gitlab-ee

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

04472b115bb9780fd746ac4c58de0264.png

下载gitlab-ee_10.7.2-ee.0

9bfd8a6acca05ebc6d754d35c76c56d2.png

这样就安装了10.7.2-ee.0版本了。

配置并启动gitlab

sudo gitlab-ctl reconfigure

e194020fea2196105aa7c701e61241e7.png

每当修改了GitLab的配置之后,都要执行如下的命令,重启配好的配置并重启GitLab,然后查看GitLab的状态

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

打开浏览器,默认是访问http://localhost即可。如果改了ip和端口,则访问http://ip:端口既可

0514224cf61e052f0d9f01975ffcbadf.png

这就是新搭建的gitlab

安装gitlab出现的问题

断口被占用

端口80以及端口8080分别被Ubuntu服务器上的Apache、Tomcat和nginx等服务所占用。

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

vim /etc/gitlab/gitlab.rb

修改其中的external_url

2a7dcb9e963b6d6228c3d88a861761b5.png

a03458884e2961ec92cf9c9a4a161778.png

手动将旧服务器上的gitlab备份

修改gitlab备份地址

备份地址默认是在var/opt/gitlab/backups

1.打开原gitlab服务器终端,通过修改gitlab.rb配置文件来修改默认存放备份文件的目录

sudo vim /etc/gitlab/gitlab.rb

1.

默认如下

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

2.

backup_path改为自定义的目录

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

495d6f72d6dc96afa97e560a76dd9e17.png

1.修改后重启配置文件

sudo gitlab-ctl reconfigure

我的示例里是没有改,备份的时间倒是改成了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

重启配置出现的问题

d53984903b2579b33766991f2cacf22d.png

出现这个radis的问题,不知道如何解决,有大佬知道,求告知,但是不影响备份

8e108586f8856f95ed7f943229ea3769.png

这个问题是由于,我执行了sudo chmod -R 777 gitlab的命令,将gitlab的子目录下的所有文件都赋予了可读可写可执行的权限

解决方式

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

gitlab开始备份

通过命令来备份原服务器上gitlab的数据。

sudo gitlab-rake gitlab:backup:create

b420cc73c30f60c9d7a72cd59c494d33.png

备份的文件会放在var/opt/gitlab/backups下,名称类似于1558509153_2019_05_22_10.7.2-ee_gitlab_backup.tar,这个压缩包包含了gitlab备份的时间和版本。

可以看到backups下面的备份包

ce9367e7a30e5680b40dcd0ad4670e03.png

手动将gitlab备份包scp到新服务器上

通过scp命令

将新服务器上的backups权限升到777

sudo chmod 777 backups/

不会请戳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

在新服务器中/var/opt/gitlab/backups下就出现了新的备份包

重启发现所有备份包和脚本都清除的问题

之前由于backups权限问题,我将备份包发送到/tmp目录下,

重启电脑时,linux自动清除/tmp文件夹下的内容

原因是tmp是一个特殊的文件夹,系统会自动清理,所以大家最好不要把文件放到这个地方,被清理了就不好了。

手动恢复新服务器上的gitlab备份包

修改备份文件权限

如果没有修改backups目录的权限,会出现下面问题

9a6d83cd28b4acbd53d0ab71c414c372.png

贸然恢复,就会出现以下错

668459000cb7d029061c4f58527f9ebf.png

正确操作是降低backups操作权限

sudo chown git backups/sudo chmod 700 backups/

不要降低权限,不然文件夹进不去 操作是降低backups操作权限 为了避免gitlab恢复时,由于权限,而产生不能解压的问题,我们就将备份文件权限改为777(可读可写)

chmod 777 1558509153_2019_05_22_10.7.2-ee_gitlab_backup.tar

停止相关数据连接服务

sudo gitlab-ctl stop unicornsudo gitlab-ctl stop sidekiq

从备份文件恢复gitlab

BACKUP等于gitlab版本号,_gitlab_backup.tar是会默认添加的

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

安装开始,一共有两个交互

1.是否丢掉之前的仓库

ba3ef9eb80f2a49c8fd172da93e69f89.png

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

12918504f1ddc613af9fd1391bbc0f32.png

3 安装成功

a5a33a847c26182311c0be8a00ca8680.png

开启gitlab,并访问

sudo gitlab-ctl start

打开浏览器,访问gitlab

beedf7077fc145d45e8d5b3111605c22.png

自动将旧服务器上的gitlab备份

旧服务器上的/var/opt/gitlab目录

f7af7f8369709a10127d45b985be9810.png

定时备份

添加定时任务,每天凌晨6点执行gitlab备份

# 仇飞鸿编辑于2019-5-30 添加定时任务,每天6点,自动执行将旧服务器上的gitlab备份操作0  6    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

编写完 /etc/crontab 文件之后,需要重新启动cron服务

#重新加载cron配置文件sudo /usr/sbin/service cron reload#重启cron服务sudo /usr/sbin/service cron restart

注意:6之前是0,而不是* 最后需要重新启动cron服务

设置备份过期时间

就算是每天6点备份,一年下来也有356份,那也不得了了

那就可以设置备份过期时间,备份目录下只保存还没过期的压缩包,大大减轻了服务器的压力

通过编辑/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

我设置了7天内不过期

317cc7884b5a7c61cde6d3b528aeeea3.png

自动将gitlab备份包scp到新服务器上

新旧服务器配对密钥

由于scp总是出现交互,提示输入密码

方案一:配对密码,取消密码

方案二:expect自动交互

这里我们采取方案一

生成密钥对

在旧服务器上,输入命令

ssh-keygen -t rsa

e0d49621c9b9fe120da44f6ca1e3b7ae.png

1.生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。2.因为之前已经有/root/.ssh/id_rsa 文件存在,因此提示你是否覆盖,输入y表示覆盖3.接着会提示输入一个密码,直接回车,让它空着。当然,也可以输入一个密码。4.接着输入确认密码,输入完之后,回车密钥对就生成完了。

在/root/.ssh下生成id_rsa 和 id_rsa.pub 两个文件, 其中公共密钥保存在 /root/.ssh/id_rsa.pub,私有密钥保存在/root/.ssh/id_rsa。

cd /home/gushenxing/.ssh/

1321d3c9f5ad9b2a7ff08e2eaabc5992.png

在旧服务器上cp生成rsa公钥证书给新服务器

然后在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A,以便拷贝到新服务器。

执行cp命令复制

cp id_rsa.pub id_rsa.pub.A

3b19e771dda9451c11c7dc6dfb0d2785.png

执行scp命令传输

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

f0836a44c417e397c60f083119efd42a.png

进入新服务器查看公钥

baf46dca3655977655dcb54ec89278e7.png

这里使用scp命令需要输入密码,当我们把下面的第三步执行完毕之后,以后旧服务器使用scp命令复制文件到新服务器的话,就不需要再次输入密码。

密钥配对

创建authorized_keys文件

当第二步将旧服务器上的id_rsa.pub.A 文件copy到新服务器的目录/root/.ssh

f4d819bcffb012c12c4d55ba60c35bc1.png

我们在新服务器的/root/.ssh下创建authorized_keys文件,使用如下命令

touch authorized_keys

将id_rsa.pub.A文件内容追加到authorized_keys 文件中

cat id_rsa.pub.A >> authorized_keys

8b5d1ee09dc60a354ddd4a3275390723.png

打开authorized_keys查看

ec607b8618aac1b303b92594e1c6b22c.png

修改authorized_keys文件的权限

修改authorized_keys文件的权限

authorized_keys文件的权限很重要,如果设置为777,那么登录的时候,还是需要提供密码的。

这个权限足够,越低越好

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

或者是这个权限

14c1e2fdcc22226bb6cff5d9c46942f9.png

测试

在旧服务器上使用scp命令复制文件到新服务器上是否还需要密码

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

在新服务器上,再次使用刚才的命令,发现已经可以不需要输入密

474999163dffc646f5bc81f54a8fcfe8.png

创建Shell定时远程备份脚本

在旧服务器上创建定时远程备份脚本

创建自动scp的脚本和日志目录

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

因为到时候,我们会将该定时远程备份脚本auto_scp.sh执行的时间,放到Gitlab自动备份脚本auto_scp.sh之后的一小时之内,因此我们只需要每次执行远程备份脚本auto_scp.sh的时候,只需要cp一个小时之内的生成的新的Gitlab备份文件。

auto_scp.sh

#!/bin/bash# 新旧服务器 gitlab备份文件存放路径 BACKUPDIR=/var/opt/gitlab/backups# 远程备份服务器 登录账户 RemoteUser=gitlab-backup# 远程备份服务器 IP地址 RemoteIP=192.168.3.113#当前系统日期 DATE=`date "+%Y-%m-%d-%H-%M-%S"`#Log存放路径LogFile=$BACKUPDIR/log/$DATE.log#查找本地备份目录下时间为1天之内并且后缀为.tar的gitlab备份文件BACKUPFILE_SEND_TO_REMOTE=$(find $BACKUPDIR -type f -mmin -1440 -name '*.tar')#新建日志文件touch $LogFile#追加日志到日志文件echo "---------------------------------开始-----------------------------------" >> $LogFileecho "gitlab auto backup to remote server, start at $DATE" >> $LogFileecho "---------------------------------分割线---------------------------------" >> $LogFile#输出日志,打印出每次scp的文件名echo "the file to scp to remote server is $BACKUPFILE_SEND_TO_REMOTE" >> $LogFile#备份到远程服务器scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$BACKUPDIRecho "---------------------------------分割线---------------------------------" >> $LogFileecho "remote server is $RemoteUser@$RemoteIP:$BACKUPDIR" >> $LogFile#追加日志到日志文件echo "---------------------------------结束-----------------------------------" >> $LogFile~

62ea8ad9ce766cae3fb7dc1aab1b27da.png

测试

由于auto_scp.sh执行权限是root,所以还得要交互密

b2073fcb7d1621ec32493e1012b01c5b.png

降低auto_scp.sh和log的权限

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

1.

执行命令,不要sudo执行

bash auto_scp.sh

此时不需要密码

2.

查看日志文件

cb319a876b0898a485e66d03ad93b35b.png

3.

发现新服务器上已经出现了备份

98ae4529708c1176260f6479fe923a99.png

往crontab添加定时任务,自动执行scp脚本

sudo vim /etc/crontab

添加下面命令

# 仇飞鸿编辑于2019-6-04 添加定时任务,每天7点,自动执行将gitlab备份包scp到新服务器上的操作0  7    * * *   gushenxing   bash /var/opt/gitlab/auto_scp.sh

290e49e2daa42e7fac3c21a41b1aa570.png

编写完 /etc/crontab 文件之后,需要重新启动cron服务

#重新加载cron配置文件sudo /usr/sbin/service cron reload#重启cron服务sudo /usr/sbin/service cron restart

旧服务器上的操作已结束,完成了自动将旧服务器上的gitlab备份和自动将gitlab备份包scp到新服务器上

自动恢复新服务器上的gitlab备份包

自动删除过期备份包脚本

cd /var/opt/gitlabsudo touch auto_remove_backup.sh

填写脚本代码

#!/bin/bash#远程备份服务器gitlab备份文件存放路径GITLABDIR=/var/opt/gitlab/backups# 查找远程备份路径下,超过7天且文件后缀为.tar的gitlab备份文件,然后删除find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;

往crontab添加定时任务,自动执行删除备份包脚本

sudo vim /etc/crontab

添加下面命令

# 仇飞鸿编辑于2019-5-30 添加定时任务,每天上午8点,自动执行删除过期的gitlab备份文件操作0  8    * * *   root   bash /var/opt/gitlab/auto_remove_backup.sh

编写完 /etc/crontab 文件之后,需要重新启动cron服务

#重新加载cron配置文件sudo /usr/sbin/service cron reload#重启cron服务sudo /usr/sbin/service cron restart

自动恢复脚本

cd /var/opt/gitlabsudo touch auto_recovery_backup.sh
#!/bin/bash#备份文件所在目录REMOTEDIRBACKUPS=/var/opt/gitlab/backups#找到当日生成的备份文件BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')#当前系统日期 DATE=`date "+%Y-%m-%d-%H-%M-%S"`#Log存放路径LogFile=$REMOTEDIRBACKUPS/log/$DATE.log#新建日志文件sudo touch $LogFile#追加日志到日志目录echo "---------------------------------开始-----------------------------------" >> $LogFileecho "gitlab auto recovery, start at $DATE" >> $LogFileecho "---------------------------------分割线---------------------------------" >> $LogFile#输出日志,打印出当日生成的备份文件echo "backup files generated on that day is $BACKUPFILE" >> $LogFile#截取出主要文件名FILE=$(echo ${BACKUPFILE#*backups/})#截取恢复文件名RESTOREFILE=$(echo ${FILE%_gitlab*})echo "---------------------------------分割线---------------------------------" >> $LogFile#输出日志,打印出备份文件复制目标目录echo "backup files generated scp to $REMOTEDIRBACKUPS" >> $LogFile#进入到目标目录cd $REMOTEDIRBACKUPS#备份文件权限修改为可读可写可执行chmod 777 $FILE#停止相关数据连接服务sudo gitlab-ctl stop unicornsudo gitlab-ctl stop sidekiq#自动化交互,从备份文件恢复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"#开启gitlabsudo gitlab-ctl startecho "---------------------------------分割线---------------------------------" >> $LogFile#输出日志,从备份文件恢复gitlabecho "recovery was successful" >> $LogFile#追加日志到日志目录echo "---------------------------------结束-----------------------------------" >> $LogFile

其中加入自动交互expect

测试

执行结果

602f78db695f84622f47a97d5b40e55f.png

0882c1efb955de98168ec91f8e77aa47.png

往crontab添加定时任务,自动执行恢复备份包脚本

sudo vim /etc/crontab

在crontab中加入此定时任务

# 仇飞鸿编辑于2019-6-3 添加定时任务,每天上午9点,自动执行从备份包中恢复gitlab操作0  9    * * *   root    bash /var/opt/gitlab/auto_recovery_backup.sh

d9e138164d16bce8b55a3f0333ba4167.png

编写完 /etc/crontab 文件之后,需要重新启动cron服务

#重新加载cron配置文件sudo /usr/sbin/service cron reload#重启cron服务sudo /usr/sbin/service cron restart

完整版脚本

旧服务器上的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 添加定时任务,每天6点,自动执行将旧服务器上的gitlab备份>操作0  6    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1# 仇飞鸿编辑于2019-6-04 添加定时任务,每天7点,自动执行将gitlab备份包scp到新服务器上的操作0 7     * * *  gushenxing  bash /var/opt/gitlab/auto_scp.sh#

新服务器上的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 添加定时任务,每天上午8点,自动执行删除过期的gitlab备份文件操作0  8    * * *   root    bash /var/opt/gitlab/auto_remove_backup.sh# 仇飞鸿编辑于2019-6-3 添加定时任务,每天上午9点,自动执行从备份包中恢复gitlab操>作0  9    * * *   root    bash /var/opt/gitlab/auto_recovery_backup.sh# 仇飞鸿编辑于2019-6-12 添加定时任务,每天上午10点,自动删除var/opt/gitlab/backups/tmp0  10   * * *   root    rm -rf /var/opt/gitlab/backups/tmp

自动将gitlab备份包scp到新服务器脚本auto_scp.sh

#!/bin/bash# 新旧服务器 gitlab备份文件存放路径 BACKUPDIR=/var/opt/gitlab/backups# 远程备份服务器 登录账户 RemoteUser=gitlab-backup# 远程备份服务器 IP地址 RemoteIP=192.168.3.113#当前系统日期 DATE=`date "+%Y-%m-%d-%H-%M-%S"`#Log存放路径LogFile=$BACKUPDIR/log/$DATE.log#查找本地备份目录下时间为1天之内并且后缀为.tar的gitlab备份文件BACKUPFILE_SEND_TO_REMOTE=$(find $BACKUPDIR -type f -mmin -1440 -name '*.tar')#新建日志文件touch $LogFile#追加日志到日志文件echo "---------------------------------开始-----------------------------------" >> $LogFileecho "gitlab auto backup to remote server, start at $DATE" >> $LogFileecho "---------------------------------分割线---------------------------------" >> $LogFileecho "remote server is $RemoteUser@$RemoteIP:$BACKUPDIR" >> $LogFile#追加日志到日志文件echo "---------------------------------结束-----------------------------------" >> $LogFile

自动执行删除过期的gitlab备份文件脚本auto_remove_backup.sh

#!/bin/bash#远程备份服务器gitlab备份文件存放路径GITLABDIR=/var/opt/gitlab/backups# 查找远程备份路径下,超过7天且文件后缀为.tar的gitlab备份文件,然后删除find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;

自动执行从备份包中恢复gitlab脚本auto_recovery_backup.sh

#!/bin/bash#备份文件所在目录REMOTEDIRBACKUPS=/var/opt/gitlab/backups#找到当日生成的备份文件BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')#当前系统日期 DATE=`date "+%Y-%m-%d-%H-%M-%S"`#Log存放路径LogFile=$REMOTEDIRBACKUPS/log/$DATE.log#新建日志文件sudo touch $LogFile#追加日志到日志目录echo "---------------------------------开始-----------------------------------" >> $LogFileecho "gitlab auto recovery, start at $DATE" >> $LogFileecho "---------------------------------分割线---------------------------------" >> $LogFile#输出日志,打印出当日生成的备份文件echo "backup files generated on that day is $BACKUPFILE" >> $LogFile#截取出主要文件名FILE=$(echo ${BACKUPFILE#*backups/})#截取恢复文件名RESTOREFILE=$(echo ${FILE%_gitlab*})echo "---------------------------------分割线---------------------------------" >> $LogFile#输出日志,打印出备份文件复制目标目录echo "backup files generated scp to $REMOTEDIRBACKUPS" >> $LogFile#进入到目标目录cd $REMOTEDIRBACKUPS#备份文件权限修改为可读可写可执行chmod 777 $FILE#停止相关数据连接服务sudo gitlab-ctl stop unicornsudo gitlab-ctl stop sidekiq#自动化交互,从备份文件恢复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"#开启gitlabsudo gitlab-ctl startecho "---------------------------------分割线---------------------------------" >> $LogFile#输出日志,从备份文件恢复gitlabecho "recovery was successful" >> $LogFile#追加日志到日志目录echo "---------------------------------结束-----------------------------------" >> $LogFile

参考文献

gitlab官网[2]

ubuntu16.04中gitlab安装[3]

gitlab自动备份[4]

【git学习】在CenterOS系统上恢复GitLab时出现错误:tar: 由于前次错误,将以上次的错误状态退出 unpacking backup failed[5]

如何查看 GitLab 版本号[6]

Linux上Gitlab卸载[7]

git学习------> Gitlab如何进行备份恢复与迁移?[8]

【git学习】在CenterOS系统上安装GitLab并自定义域名访问GitLab管理页面[9]

linux权限补充:rwt rwT rws rwS 特殊权限[10]

References

[1] Linux scp命令: https://www.runoob.com/linux/linux-comm-scp.html[2] gitlab官网: https://about.gitlab.com/install/#ubuntu[3] ubuntu16.04中gitlab安装: https://blog.csdn.net/weixin_38883338/article/details/82153402[4] gitlab自动备份: https://www.jianshu.com/p/a176789fef21[5] 【git学习】在CenterOS系统上恢复GitLab时出现错误:tar: 由于前次错误,将以上次的错误状态退出 unpacking backup failed: https://www.jianshu.com/p/8a287f31a646[6] 如何查看 GitLab 版本号: https://blog.csdn.net/wo18237095579/article/details/81106150[7] Linux上Gitlab卸载: https://www.jianshu.com/p/e2e98c45c244[8] git学习------> Gitlab如何进行备份恢复与迁移?: https://blog.csdn.net/ouyang_peng/article/details/77070977[9] 【git学习】在CenterOS系统上安装GitLab并自定义域名访问GitLab管理页面: https://blog.csdn.net/ouyang_peng/article/details/72903221[10] linux权限补充:rwt rwT rws rwS 特殊权限: https://www.cnblogs.com/qlwy/archive/2011/06/26/2121919.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纪念音视频界前辈-雷霄骅

这是一篇记录文,纪念一位在音视频领域研究的博士雷霄骅。雷霄骅生前是中国传媒大学通信与信息系统博士在读生,于2016年7月17日凌晨猝死在学校主楼五层,10月就将迎来自己26岁的生日。雷霄骅在音视频领域有很深的造诣和贡献,指导了很…

gcc和g++有什么区别?

来源 | C语言中文网发展至今,GCC 编译器已经更新至 V10 版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C 。除此之外,当下的 GCC 编译器还支持编译 Go、Objective-C,Objectiv…

druid删除数据_Apache druid 删除数据流程 0.13

背景由于前端时间数据导入出现问题,导致druid 中的数据需要重新导入,但又要防止数据重复,需要把数据彻底清理。问题由于druid 属于时间序列数据库,删除的时候只能时间范围删除。删除流程根据时间范围查询segements 标识(在coordinator节点查询…

使用C语言扩展Python(四)

上一篇里的LAME项目已经展示了python如何与C语言交互,但程序仍不够理想,在python这一端仅仅是传递源文件和目标文件的路径,再调用C模块的encode方法来进行编码,但问题在于你无法控制encode函数,比如你想编码的源文件如…

案例 github_2019年12月Github上最热门的Java开源项目,速来围观!

转眼之间,已经进入了2020年,2019年发生的一切仿佛就在昨天。那么,刚过去不久的12月份GitHub上最热门的Java开源项目排行已经出炉啦。下面我带大家一起来看看上榜详情:1、Alinkhttps://github.com/alibaba/Alink Star 1695Alink 是…

实战CRC校验 | 固件如何校验自身完整性?

来源:公众号【鱼鹰谈单片机】作者:鱼鹰Osprey在一些比较严格的行业里面,不是说你的程序能完成必要功能就可以,还需要添加一些额外的功能,比如最常见的看门狗功能,它可以在程序死机时完成重启,但…

想一个颠覆性技术方向建议,你能想到什么?

如上图,是这次文章的主题。我对这个问题是有想法的,我现在是做音频研究,但是我觉得未来核心的方向一定是能源。试想一下,现在的手机功能越来越多,移动设备将会占领我们未来很长一段时间,那么手机的电池要如…

centos 安装idea 非可视化_太厉害了!目前 Redis 可视化工具最全的横向评测

转自:一入码坑深似海链接:www.jianshu.com/p/cb9f4dcb3b921. 命令行不知道大家在日常操作redis时用什么可视化工具呢?以前总觉得没有什么太好的可视化工具,于是问了一个业内朋友。对方回:你还用可视化工具?…

解决克隆clone github 仓库速度过慢的问题

解决克隆clone GitHub 仓库速度过慢的问题 由于大家都懂的原因,我们访问GitHub的速度确实有点慢,特别是克隆比较大的仓库的时候,那速度简直无法直视。 今天我就给大家带来一个邪门歪道,不通过FQ来解决速度问题。 先说结论吧&#…

聊聊身边的嵌入式,自拍神器自拍杆

曾几何时,自拍杆风靡世界,火当然是有原因的,这么一个小装备,极大的满足了人们爱拍照的需求,方便好用、经济实惠。恰巧我手上也有一个,收起来时很小、不占地方打开后可随意调节拍照同时它有个隐藏式三脚架功…

大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(十二)多语言支持...

虽然平时很少接触老外的项目、也很少碰到老外,但往往赚大钱的人是经常跟老外做买卖的人居多,他们大多需要网站是全英文的,我们往往上手有一个成熟的中文的网站或者软件,例如成熟的B2C网上购物系统,但是没办法也没精力再…

lisp用entmake生产圆柱体_德BBG公司开发用于CFRP储罐模块生产过程的自闭合HPRTM模具...

自主概念、足以批量生产、可以降低投资成本。每次操作最多可同时生产15个气瓶。照片来源:BBG机械制造商BBG GmbH&Co.KG(德国明德尔海姆)于9月16日提出了一种自动闭合高压树脂传递模塑(HP-RTM)模具的概念,该模具能够快速、重复地制造各种车辆用的紧凑…

【深度剖析】小米CyberDog四足机器人的AI运动系统的实现

2021年8月10日,雷军进行继宣布造车之后的第二次演讲。在这场以“我的梦想,我的选择”为主题的演讲上,雷军详细讲述了创业后的故事,发布了一系列全新产品。其中,给人最大惊喜同时也给人带来诸多疑问的就是我们这篇推文的…

变更控制管理流程图_制度是最好的老板,流程就是最好的管理!流程建立法则(附案例)...

为什么很多企业制定了战略,一线执行却没有到位?为什么员工办事拖拉,执行力不到位?为什么总有下属在等待老板分配任务,不能主动地去工作?为什么一些企业的老板处于很忙碌的的糟糕状态?上述这样问…

第二节:Css重写样式

一丶 进入浏览器---->F12----->找到要修改的区域的Style 进行重写Css样式 二丶打开新页面 window.open("/Persitent/OtherIndex?connectionId" connectionId,"_blank"); 转载于:https://www.cnblogs.com/chenze-Index/p/9309775.html

我的Linux内核学习笔记

在开始今天的内容之前,其实有一些题外话可以和大家分享一下。自从工作以来,我个人一直都有一个观点。那就是怎么样利用简单的代码来说明开发中的问题,或者是解释软件中的原理,这是一个很高的学问。有些道理看上去云里雾里说不清楚…

10 文件无效_新手必看!10个CAD常见问题解决技巧

对于很多刚接触CAD的萌新来说,学习过程遇到的问题总是很多。如果没有老师解答的话,上百度搜索也常常不得要领,所以今天为大家做了大概的问题总结,主要是以下几个问题:1多线段合并A.输入命令“PE”B&#xf…

TurboMail手机客户端—强大的附件文档阅读能力

2019独角兽企业重金招聘Python工程师标准>>> 对于频繁使用邮件的用户而言,收发附件已是家常便饭,但对于手机查看附件,用户却遇到了很多问题。稍微低端的手机,除了txt格式的文本,基本上其他格式的文档&#…

连不上机器判断机器状态_如何准确估计机器人的状态,增强机器人控制的精度及稳定性...

在机器人学中,状态估计和控制一样,是无法避开的问题。 任何传感器的精度都是有限的,如何利用传感器信息,尽可能准确地估计一组完整描述机器人随时间运动的物理量,如位置、速度、加速度、角度、角速度等,是状…

2个字符串相等 swift_Swift快速入门(一)之 Swift基础语法

Swift快速入门(一)之 Swift基础语法近期重新学习了一遍Swift语言,主要以《Swift编程权威指南(第2版)》为教程,学习过程中结合比对Java语言特性将学习心得作为三篇笔记:Swift基础语法&#xff0c…