前言

通常而言我们平时是会使用大量的小脚本来做一些重复性质的工作,譬如定时更新网站什么的,这里呢记录一下我这边常用的一些简单的小脚本。

通过 git 定时任务简单的更新网站

网站是通过 github 托管的,得益于一些和 git 相关的 flow 插件,我们可以有效的通过 git 完成自动化构建操作。

但是部署有那么一点麻烦,如果我们通过 git flow 去推送或是通过 git web hook 去操作,着实麻烦了不少。

所以比较简单的方法就是通过定时任务定期去更新一下即可。(所以说是小脚本,如果用上 python 和 node 当然可以通过 web hook 的方式更好的管理,但是事实上通常而言,我们不太需要这一手段)。

一般来说定时任务有下面几个用法:

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务

我们可以创建一个最简单的定时任务脚本来完成定时更新

#!/bin/bash
path=<fake_path>
git_folder="$path/<fake_repo>"
sockfile="$path/git-build.sock"
log_path="$path/log/git-$(date +%F%n).log"
 
startCheck() {
    echo $(date +%F%n%T)
    cd $git_folder
    if [ -f "$sockfile" ]; then
        echo 'there is a task run'
        exit
    fi
    touch $sockfile
    git fetch
    if git status | grep "fast-forwarded" > /dev/null 2>&1
    then
        echo "Repo can be updated"
        git reset --hard
        git pull
        # 这边可以做一些操作用来完成指定的任务,比如拉了代码构建,当然咯我这边已经在 github 那边构建好了,并不需要这一条
        yarn build & echo $! > $sockfile
    else
        echo "No update"
    fi
    rm $sockfile
}
startCheck >> $log_path

当然咯这里经常可以碰到一些奇怪的问题,比如 node 这边加载不出 yarn 啊等等的

那么你可以选择:

  1. 使用绝对路径: <fake_path>/.nvm/versions/node/v12.13.1/bin/node <fake_path_for_repo>/node_modules/@vue/cli-service/bin/vue-cli-service.js
  2. 是直接的吧指定的配置文件引入如: <fake_path>/.bashrc

简单的备份一些存档

我服务器上放置的游戏程序不少,所以理论上都是需要备份数据的,本机备份我是觉得意义不是太大,这里一般会用 cos(腾讯云的对象存储)或是 oss (阿里云的对象存储)。

这里选用腾讯云做例子其他同理:

#!/bin/sh
export PATH=$PATH:<fake_path>/.local/bin
mkdir <tmp_path>/tmp
mkdir <backup_local_path>/backup
cp -r <path_which_need_back> <tmp_path>/tmp
time=$(date +%Y%m%d);
backup_file=<backup_local_path>/backup/$time.tar.gz
tar -zcPvf  <backup_local_path>/backup
coscmd -d config -a <ak> -s <sk> -r <bukkit_region> -b <bukkit_name> 
# 假设是低频存储
coscmd -d upload $backup_file data/$time.tar.gz -H "{'x-cos-storage-class':'Archive'}"
rm -rf <tmp_path>/tmp
# 定时输出不需要的文件
find <backup_local_path>/backup -mtime +30 -name "*.tar.gz" -exec rm -rf {} \;

这样可以简单的备份 然后存储到 oss 变成低频存储。

这里需要提一下 关于 cp 的问题,这里尽量不要直接 tar 文件夹,而应该使用 cp 先拷贝出 存档,在做压缩,由于游戏一般情况下是以 5 分钟为间隔保存游戏,我们比较大的情况下 cp 拷贝花费的时间都非小(如果存档已经非常大的情况下应当使用 hash + index 的方式快速检索变更,增量备份,这种就有专门的工具了),而 tar 花费的时间较长,所以使用 cp 可以确保尽可能的在 同一个保存周期里面保存文件。

本文标题:记一些常用的小脚本

永久链接:https://iceprosurface.com/2020/03/08/2020/normal-script/

查看源码: