记一些常用的小脚本

前言

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

通过 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服务

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

script
#!/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 (阿里云的对象存储)。

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

script
#!/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/index.html

作者授权:除特别说明外,本文由 icepro 原创编译并授权刊载发布。

版权声明:本文使用「署名-非商业性使用-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议。