前言

由于一些莫名其妙的原因,隔一晚上,博客系统就会发生一些错误。再加上自己的一些瞎操作,导致之前的数据文件惨遭丢失…… ,尽管通过复制保留了一些文章的内容,但是在排版以及链接方面有所丢失。

为了避免这种情况,决定添加一个定时自动备份到github的shell脚本.

一、准备工作

因为用的是Halo博客系统,所以只需要备份这一个目录~/.halo 就OK。因为这个系统他的用户数据和程序本身是完全分开的(数据库db,上传的附件upload,配置文件application.yaml以及主题文件templates)。

二、配置git

  1. 下载git
    apt-get install git

  2. 配置git
    git config --global user.name 'XXX'
    git config --global user.email '[email protected]'

  3. 生成公钥

配置完成后,需要创建验证用的公钥,因为git是通过ssh的方式访问资源库的,所以需要在本地创建验证用的文件,安装前可以通过命令检查SSH Keys是否存在: ls -al ~/.ssh

①关联自己账号生成公钥,适用于gitlab个人账号配置
ssh-keygen -C '[email protected]' -t rsa
邮箱为刚才输入的地址,生成的公钥在当前文件夹下。
输入公钥保存的名称,输入密码(不填为空),确认密码(不填为空)。

②关联公共账号,适用于公司环境下,大家共用一台git主机管理项目。
ssh-keygen -t rsa
输入公钥保存的名称,输入密码(不填为空),确认密码(不填为空)。
生成的公钥在当前文件夹下。

  1. 上传公钥
  • 跳转到公钥目录 cd ~/.ssh

  • 打开pub结尾的文件并复制所有内容 cat id_rsa.pub

  • 登录Github

  • 点击头像,选择 Settings

  • 左旁栏选择 SSH and GPG keys

  • 点击 New SSH key

  • 将复制的SSH Key添加进去

  • 输入密码进行验证

  • 输入该命令测试是否连接成功: ssh -T [email protected], 若成功则会出现

    ssh_test

  1. 在Github新建一个仓库用于存放备份文件
    [注]若每次提交需要输入密码,则使用 git config --global credential.helper store 强制解决

三、制作脚本

#! /bin/bash

message=`date -u + "%Y_%m_%d_%H_%M"`

cd /root/.halo

git add application.yaml upload/ db/ templates/

git commit -m $message

git push

1.将其写入到一个sh文件里面。
2.赋予执行权限 chmod +x {NAME}.sh
3.初始化~/.halo 仓库: cd ~/.halo & git init
4.绑定远程仓库 git remote add origin <远程仓库地址.git>
5.同步一下仓库 git pull origin master

四、开启脚本自动定时运行

  • 键入命令 crontab -e
  • 根据操作习惯选择编辑的工具(我使用vim)
  • 会自动打开一个文件,在文件内添加 00 03 * * * /bin/{NAME}.sh 添加的是绝对路径。(00 03 * * * 表示每天三点执行)。
  • 执行命令 service cron restart使配置的定时任务生效。

查看定时任务 crontab -l
启动服务 /sbin/service crond start
关闭服务 /sbin/service crond stop
重启服务 /sbin/service crond restart
重新载入配置 /sbin/service crond reload


【参考链接】