背景
运维时间长了,一堆crontab要写,还要处理以下几个问题,贼烦:
- crontab太多了,每次排查都麻烦。
- 每个定时任务都得去监控有没有执行成功,要人工去查日志。
- 每个都得写个预警功能,比如异常就邮件提醒,钉钉群提醒。
那有没有一个可以统一管理crontab,任务异常就自动触发预警(不用每个监控都写预警功能),查看日志也非常友好的工具呢?网上找了一圈,发现gocron就挺不错,轻量简单,该有的功能都有了。
客户端和服务端
客户端用Docker安装,服务器端用方案二安装(就一个执行文件)。
方案一
这种安装网上案例比较少,大多是源码安装。
一、搜索镜像
docker search gocron
二、拉镜像
docker pull ouqg/gocron
查看docker tag hub.docker.com/r/ouqg/gocr…
三、运行镜像
docker run -e TZ="Asia/Shanghai" --restart=always --name gocron -p 5920:5920 -d ouqg/gocron
四、初始化配置、数据库等
默认访问地址:http://127.0.0.1:5920,如果是第一次配置,先创建好数据库,填好数据库配置和管理员账号可直接初始化(表+数据)
主机名肯定不是默认的127.0.0.1,这个是指当前gocron容器的内部地址
五、已有数据库,想继续用老数据
有两种方式 1、直接修改配置文件 2、备份数据库,直接初始化数据库后还原数据。
以下是第一种方式
docker exec -it gocron sh
默认情况容器里的app/conf下是空的,需要下图2个文件来初始化配置是数据,也是下面要做的
install.lock是一个空文件,直接创建
cd conf && touch install.lock
vi app.ini修改以下数据库信息,复制保存即可,注意auth_secret一定要记得用以前的,错误的话无法手动初始化(做好auth_secret备份)
[default]
db.engine = mysql
db.host = 127.0.0.1
db.port = 3306
db.user = root
db.password = password
db.database = gocron
db.prefix =
db.charset = utf8
db.max.idle.conns = 5
db.max.open.conns = 100
allow_ips =
app.name = 定时任务管理系统
api.key =
api.secret =
enable_tls = false
concurrency.queue = 500
auth_secret = b413cb90e7e1cf8159ef3fec49333faa2b82499052c81ec826c0f8657ac07427
ca_file =
cert_file =
key_file =
修改完成后exit退出容器,docker restart gocron重启容器 再重新打开地址:http://127.0.0.1:5920 就不会默认再跳转初始化数据库页面了,用原数据库账户登录即可
六、gocron的使用
如果只是简单的使用job发一个http已经可以用了,gocron还可以配置节点,暂时没弄 案例0 0 12 * * ? 每天12点触发 也可以查看执行日志
有记录所有输出
七、重置密码
如果忘记密码可用以下sql重置,密码是123456,登录后重新修改
UPDATE gocron.`user` SET password='48a23c508cf968b63c1a58ebac679799',salt='Npqq3a' WHERE name ='admin'
八、定时清理JOB日志
删除3个月以前的JOB日志
DELETE FROM gocron.`task_log` WHERE start_time <=date_add(now(), interval -3 month)
方案二
其实官网的安装说明已经很详细了,我这里在大概的说一下。
1、必须安装go的运行环境。 2、主要gocron是web可视界面,gocron-node是服务器端需要安装的。 3、gocron的默认监听端口5920,gocron-node的默认监听端口 5921。
下载
我们以二进制的方式安装,下载下面的两个包
wget https://github.com/ouqiang/gocron/releases/download/v1.5.3/gocron-node-v1.5.3-linux-amd64.tar.gz
https://github.com/ouqiang/gocron/releases/download/v1.5.3/gocron-v1.5.3-linux-amd64.tar.gz
解压
tar -zxvf gocron-node-v1.5.3-linux-amd64.tar.gz -C /home/xj/software/
mv /home/xj/software/gocron-node-linux-amd64/gocron-node /home/xj/software/
tar -zxvf gocron-v1.5.3-linux-amd64.tar.gz
运行
启动gocron-node (不能使用root用户,使用后会失败)
sudo chown xj:xj /home/xj/software/gocron-node
sudo -u xj ./gocron-v1.5.3-linux-amd64/gocron web
sudo -u xj /home/xj/software/gocron-node
./gocron-node
启动程序后需要一直开着运行窗口,不能关掉,一会我们在说解决办法。
此刻你可以直接在浏览器里面访问,http://ip:5920,没有问题的话会打卡运行界面,需要我们输入链接数据库的配置。
完成后会跳到登陆页面,输入管理员账号和密码登陆。
任务节点
登陆后最先做的是设置任务节点,任务节点指的就是服务器,若是在哪台服务器跑脚本,就设置好哪一台,需要提前在此服务器安装gocron-node。
任务节点完成后,任务管理里面添加定时任务即可,这里的定时任务是精确到秒的,切记,切记!
添加完运行的时候,就可以看到日志了,这里不在多介绍,相信你肯定会。
后台运行脚本
创建gocron 和 gocron-node 的shell脚本gocron.sh ,放到你想放的目录,我这里放在 /home/xj/shell 中,注意下面脚本的名字变化。
#!/bin/bash
#启动gocron-node
cd /home/xj/software/
sudo -u xj bash -c 'nohup /home/xj/software/gocron-node > /dev/null 2&1 &'
#启动gocron
cd /home/gocron-linux-amd64
sudo -u xj bash -c 'nohup ./gocron > /dev/null 2&1 &'
修改文件权限,run.sh需要可执行权限。
chmod -R 777 gocron.sh
指定文件所在的组
chown -R xj:xj gocron.sh
启动脚本文件
source /home/jxiao/shell/gocron.sh
说明使用source执行的原因:当shell执行脚本的时候,它会开启一个子shell,目录跳转命令只会在这个子shell中执行,并不会影响到父shell。要想在父shell中实现目录的跳转,需要用source来执行脚本。
注意(重要的事说三遍)
- 如果是docker安装的,要找到宿主的ip,默认的127.0.0.1是gocron的容器本身
- 如果是docker安装的,要找到宿主的ip,默认的127.0.0.1是gocron的容器本身
- 如果是docker安装的,要找到宿主的ip,默认的127.0.0.1是gocron的容器本身