前言
通常而言我们平时是会使用大量的小脚本来做一些重复性质的工作,譬如定时更新网站什么的,这里呢记录一下我这边常用的一些简单的小脚本。
通过 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 啊等等的
那么你可以选择:
- 使用绝对路径:
<fake_path>/.nvm/versions/node/v12.13.1/bin/node <fake_path_for_repo>/node_modules/@vue/cli-service/bin/vue-cli-service.js
- 是直接的吧指定的配置文件引入如:
<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 可以确保尽可能的在 同一个保存周期里面保存文件。