在企业项目开发中会定时执行对应的job,对于一些简单少的job可以直接使用调度器调度执行任务。当随着公司的业务越来越多,执行任务越来越多。那么直接使用任务调度器调度任务执行会变得臃肿,而且对于任务是动态配置不可实现。如:想某一个时刻停止任务的执行、删除此任务然后修改更新任务执行时间等,如某一个任务配置到多台机器上如何做到不可用时,进行转移等问题。
为了解决此类问题,我们需要对任务的调度和执行进行分开。有统一的任务调度中心-专门进行任务的调度分发任务工作,各个任务的具体任务执行分配到个个项目中。从而达到对任务的统一配置和管理。
#基础环境
#GO环境
cd /usr/local/src/
mkdir -p $HOME/gocode/src
#
tar -zxf go1.8.3.linux-amd64.tar.gz #https://www.golangtc.com/download
#
echo -e 'export GOPATH=$HOME/gocode\nexport GOROOT=/usr/local/go\nexport GOBIN=$GOROOT/bin\nexport GOPKG=$GOROOT/pkg/tool/linux_amd64\nexport GOARCH=amd64\nexport GOOS=linux\nexport PATH=.:$PATH:$GOBIN:$GOPKG' >>$HOME/.bashrc
#
source $HOME/.bashrc
#
go version
go version go1.8.3 linux/amd64
#DB环境
yum install epel-release ntpdate chrony -y
rpm -ivh http://repo.MysqL.com/MysqL-community-release-el6.rpm
yum install MysqL-server MysqL-client -y
service MysqLd start
MysqLadmin -uroot password '123456'
>create database scheduler;grant all privileges on *.* to@192.168.28.131 identified by '12345678';flush privileges;
#scheduler安装
cd $GOPATH/src
git clone https://github.com/shotdog/scheduler
go get github.com/astaxie/beego
go get github.com/shotdog/quartz
go get github.com/go-sql-driver/MysqL
#init db scheduler.sql
MysqL -uroot -p scheduler < scheduler.sql
#modify conf/app.conf -->database config
vim scheduler/conf/app.conf
db_path = /usr/bin/MysqL
db_host = 192.168.28.131
db_port = 3306
db_user = root
db_pass = 12345678
db_name = scheduler
db_type = MysqL
#modify main.go -->database config
func init() {
orm.RegisterDriver("MysqL",orm.DRMysqL)
orm.RegisterDataBase("default","MysqL","root:12345678@/scheduler?charset=utf8&loc=Local")
orm.RegisterModel(&entity.JobInfo{},&entity.JobInfoHistory{},&entity.JobSnapshot{})
}
#scheduler运行
cd $GOPATH
cd src
cd scheduler
go build main.go
./main
#client测试
cd $HOME/src && git clone https://github.com/shotdog/scheduler-client.git
cd scheduler-client
go build main.go
./main
Link
https://github.com/shotdog/scheduler