300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 定期清理gitlab的备份监控gitlab备份

定期清理gitlab的备份监控gitlab备份

时间:2019-06-02 14:18:16

相关推荐

定期清理gitlab的备份监控gitlab备份

定期清理gitlab的备份&监控gitlab备份

1.如何备份gitlab

备份gitlab的命令是:gitlab-rake gitlab:backup:create会将备份生成到默认目录下,/gitlab/data/backups/目录下,注意备份时,要手动copy两个文件。在config目录下的gitlab.rb以及gitlab-secrets.json文件。

如果gitlab是docker容器里的,在容器外或者脚本中执行命令:docker exec -it gitlab1114 /bin/bash -c '/opt/gitlab/bin/gitlab-rake gitlab:backup:create '

如果脚本要添加到计划任务crontab里,需要将上面命令中的-it参数去掉,因为crontab不能打开终端。

一般gitlab的备份是每天都要生成的,否则万一出点问题,备份丢失了那可就完犊子了。所以如果不定期清理之前的gitlab备份就又会不断生成备份,占用空间,于是决定写一个清理七天前的脚本来完成这个工作,每次只保留7个备份。

2.编写清理七天前备份的脚本

观察gitlab生成的备份不难看出一个规律,那就是生成备份的备份文件名都带有linux时间戳。例如:1639492444__12_14_14.0.11_gitlab_backup.tar。

最前面的那串数字就是时间戳,那我们可以根据这个时间戳来判断哪些备份是七天前的备份。脚本如下

#!/bin/bash# 最好建立一个日志目录,来记录什么时间清理了哪些备份,个人习惯,方便维护。echo "=============================清理gitlab七天前备份文件==========================" >> /root/monitor/rm_gitlab_backups.logecho "`date`" >> /root/monitor/rm_gitlab_backups.logecho "rm -rf /home/data/gitlab-backups/*.log" >> /root/monitor/rm_gitlab_backups.logrm -rf /home/data/gitlab-backups/*.log# 定义一个数组来存放gitlab备份文件的时间戳信息,时间戳信息从备份文件的文件名入手。declare -a ctime_list=($(ls /home/data/gitlab-backups/*.tar | awk -F '_' '{print $1}' | awk -F '/' '{print $5}'))# 获取数组的长度len=${#ctime_list[@]}# 获取当前时间戳,用当前时间戳减去604800也就是7x86400秒,就是7天前的时间戳。time=$((`date +%s` - 604800))# echo $timefor ((i=0;i<$len;i++)); do# 与七天前的时间戳进行比较,小于该时间戳说明这个备份已经存在超过七天了,那么就可清理掉了。if [ $time -ge ${ctime_list[i]} ]; thenecho "rm -rf /home/data/gitlab-backups/${ctime_list[i]}_*.tar" >> /root/monitor/rm_gitlab_backups.logrm -rf /home/data/gitlab-backups/${ctime_list[i]}_*.tarfidone

3.监控gitlab备份

最近发现gitlab所在的服务器比较老,总出各种问题,docker服务莫名就崩了,导致gitlab服务出现问题,结果回过头来发现备份都没有了,那这个清理备份的脚本还有毛线的用?所以需要对gitlab的备份进行监控!!!万一真丢了,那就真的完犊子了。

根据上面清理备份时用到的时间戳的概念,很容就想到一个监控的思路,就根据时间戳判断,必须每天监控,只要有一天没有备份了,就发邮件报警!

这里发邮件的工具,我用的是比较OG的heirloom-mailx,注意要先apt-get install mailutils

配置文件一般是/etc/s-nail.rc,需要修改如下参数

# 设置发送者邮箱set from="wozhendehaoshuai@"# 配置smtp服务器和端口set smtp="smtps://smtp.domain:port"# 配置发送者用户名和第一项一致就行set smtp-auth-user"=wozhendehaoshuai@"# 配置授权码,腾讯企业邮箱肯定是有授权码的,其他的不知道,据说这也可以配置成邮箱密码set smtp-auth-password="xxxxxxxxxxxxxxxxxxxxx"# 配置认证方式set smtp-auth=login

监控脚本如下:

#!/bin/bash# 沿用上面脚本的数组来获取备份的时间戳declare -a ctime_list=($(ls /home/data/gitlab-backups/*.tar | awk -F '_' '{print $1}' | awk -F '/' '{print $5}'))len=${#ctime_list[@]}# 因为数组元素是从0开始排序的,所以要从最后一个进行比较,最后一个元素的序号就是数组长度减一last=$(($len-1))time=$((`date +%s` - 86400))# 判断,如果超过一天没备份,发送邮件if [ $time -ge ${ctime_list[$last]} ]; thenecho "已经一天没有gitlab备份文件了!!" | mail -s "gitlab-backups Warning!" wozhendehaoshuai@ fi

4.设置计划任务定期执行脚本

执行crontab -e编辑计划任务

选择每周的周日0点执行清理脚本,每天的8点执行监控脚本

00 00 * * 7 bash /root/monitor/gitlab_backup_clear.sh00 08 * * * bash /root/monitor/gitlab_backup_monitor.sh

注意:以上操作都是在root用户下执行的,实际使用的时候请根据用户权限决定!!!请勿滥用root哦

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。