mirror of https://github.com/ouqiang/gocron
使用makefile构建应用
parent
e1fa3cf645
commit
738b168689
|
@ -30,10 +30,12 @@ data
|
||||||
conf
|
conf
|
||||||
profile/*
|
profile/*
|
||||||
public/resource/javascript/vue.js
|
public/resource/javascript/vue.js
|
||||||
gocron
|
/gocron
|
||||||
gocron.exe
|
gocron.exe
|
||||||
gocron-node
|
/gocron-node
|
||||||
gocron-node.exe
|
gocron-node.exe
|
||||||
|
/bin
|
||||||
|
/packages
|
||||||
|
|
||||||
node_modules
|
node_modules
|
||||||
package.json
|
package.json
|
114
build.sh
114
build.sh
|
@ -1,114 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# set -x -u
|
|
||||||
# 构建应用, 生成压缩包 gocron.zip或gocron.tar.gz
|
|
||||||
# ./build.sh -p windows -a amd64 -v 1.4
|
|
||||||
# 参数含义
|
|
||||||
# -p 指定平台(windows|linux|darwin)
|
|
||||||
# -a 指定体系架构(amd64|386), 默认amd64
|
|
||||||
# -v 版本号
|
|
||||||
|
|
||||||
TEMP_DIR=`date +%s`-temp-`echo $RANDOM`
|
|
||||||
|
|
||||||
# 目标平台 windows,linux,darwin
|
|
||||||
OS=''
|
|
||||||
# 目标平台架构
|
|
||||||
ARCH=''
|
|
||||||
# 应用名称
|
|
||||||
APP_NAME='gocron'
|
|
||||||
# 版本号
|
|
||||||
VERSION=''
|
|
||||||
# 可执行文件名
|
|
||||||
EXEC_NAME=''
|
|
||||||
# 压缩包名称
|
|
||||||
COMPRESS_FILE=''
|
|
||||||
|
|
||||||
|
|
||||||
# -p 平台 -a 架构
|
|
||||||
while getopts "p:a:v:" OPT;
|
|
||||||
do
|
|
||||||
case $OPT in
|
|
||||||
p) OS=$OPTARG
|
|
||||||
;;
|
|
||||||
a) ARCH=$OPTARG
|
|
||||||
;;
|
|
||||||
v) VERSION=$OPTARG
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -z $OS ]];then
|
|
||||||
echo "平台不能为空"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $OS != 'windows' && $OS != 'linux' && $OS != 'darwin' ]];then
|
|
||||||
echo '平台错误,支持的平台 windows linux darmin(osx)'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z $ARCH ]];then
|
|
||||||
ARCH='amd64'
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $ARCH != '386' && $ARCH != 'amd64' ]];then
|
|
||||||
echo 'arch错误,仅支持 386 amd64'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z $VERSION ]];then
|
|
||||||
echo '版本号不能为空'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo '开始编译调度器'
|
|
||||||
if [[ $OS = 'windows' ]];then
|
|
||||||
CGO_ENABLED=0 GOOS=$OS GOARCH=$ARCH go build -tags gocron -ldflags '-w'
|
|
||||||
else
|
|
||||||
CGO_ENABLED=0 GOOS=$OS GOARCH=$ARCH go build -tags gocron -ldflags '-w'
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $? != 0 ]];then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo '编译完成'
|
|
||||||
|
|
||||||
if [[ $OS = 'windows' ]];then
|
|
||||||
EXEC_NAME=${APP_NAME}.exe
|
|
||||||
COMPRESS_FILE=${APP_NAME}-v${VERSION}-${OS}-${ARCH}.zip
|
|
||||||
else
|
|
||||||
EXEC_NAME=${APP_NAME}
|
|
||||||
COMPRESS_FILE=${APP_NAME}-v${VERSION}-${OS}-${ARCH}.tar.gz
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p $TEMP_DIR/$APP_NAME
|
|
||||||
if [[ $? != 0 ]]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 需要打包的文件
|
|
||||||
PACKAGE_FILENAME=(public templates ${EXEC_NAME})
|
|
||||||
|
|
||||||
echo '复制文件到临时目录'
|
|
||||||
# 复制文件到临时目录
|
|
||||||
for i in ${PACKAGE_FILENAME[*]}
|
|
||||||
do
|
|
||||||
cp -r $i $TEMP_DIR/$APP_NAME
|
|
||||||
done
|
|
||||||
|
|
||||||
echo '压缩文件'
|
|
||||||
# 压缩文件
|
|
||||||
cd $TEMP_DIR
|
|
||||||
if [[ $OS = 'windows' ]];then
|
|
||||||
zip -rq $COMPRESS_FILE *
|
|
||||||
else
|
|
||||||
tar czf $COMPRESS_FILE *
|
|
||||||
fi
|
|
||||||
mv $COMPRESS_FILE ../
|
|
||||||
cd ../
|
|
||||||
|
|
||||||
rm $EXEC_NAME
|
|
||||||
rm -rf $TEMP_DIR
|
|
||||||
|
|
||||||
echo '打包完成'
|
|
||||||
echo '生成压缩文件--' $COMPRESS_FILE
|
|
|
@ -1,93 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# set -x -u
|
|
||||||
# 任务节点打包, 生成压缩包 gocron-node.zip或gocron-node.tar.gz
|
|
||||||
# ./build-node.sh -p windows -a amd64 -v 1.4
|
|
||||||
# 参数含义
|
|
||||||
# -p 指定平台(windows|linux|darwin)
|
|
||||||
# -a 指定体系架构(amd64|386), 默认amd64
|
|
||||||
# -v 版本号
|
|
||||||
|
|
||||||
|
|
||||||
# 目标平台 windows,linux,darwin
|
|
||||||
OS=''
|
|
||||||
# 目标平台架构
|
|
||||||
ARCH=''
|
|
||||||
# 应用名称
|
|
||||||
APP_NAME='gocron-node'
|
|
||||||
# 版本号
|
|
||||||
VERSION=''
|
|
||||||
# 可执行文件名
|
|
||||||
EXEC_NAME=''
|
|
||||||
# 压缩包名称
|
|
||||||
COMPRESS_FILE=''
|
|
||||||
|
|
||||||
|
|
||||||
# -p 平台 -a 架构
|
|
||||||
while getopts "p:a:v:" OPT;
|
|
||||||
do
|
|
||||||
case $OPT in
|
|
||||||
p) OS=$OPTARG
|
|
||||||
;;
|
|
||||||
a) ARCH=$OPTARG
|
|
||||||
;;
|
|
||||||
v) VERSION=$OPTARG
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -z $OS ]];then
|
|
||||||
echo "平台不能为空"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $OS != 'windows' && $OS != 'linux' && $OS != 'darwin' ]];then
|
|
||||||
echo '平台错误,支持的平台 windows linux darmin(osx)'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z $ARCH ]];then
|
|
||||||
ARCH='amd64'
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $ARCH != '386' && $ARCH != 'amd64' ]];then
|
|
||||||
echo 'arch错误,仅支持 386 amd64'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z $VERSION ]];then
|
|
||||||
echo '版本号不能为空'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $OS = 'windows' ]];then
|
|
||||||
EXEC_NAME=${APP_NAME}.exe
|
|
||||||
COMPRESS_FILE=${APP_NAME}-v${VERSION}-${OS}-${ARCH}.zip
|
|
||||||
else
|
|
||||||
EXEC_NAME=${APP_NAME}
|
|
||||||
COMPRESS_FILE=${APP_NAME}-v${VERSION}-${OS}-${ARCH}.tar.gz
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo '开始编译任务节点'
|
|
||||||
if [[ $OS = 'windows' ]];then
|
|
||||||
CGO_ENABLED=0 GOOS=$OS GOARCH=$ARCH go build -tags node -ldflags '-w' -o $EXEC_NAME
|
|
||||||
else
|
|
||||||
CGO_ENABLED=0 GOOS=$OS GOARCH=$ARCH go build -tags node -ldflags '-w' -o $EXEC_NAME
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $? != 0 ]];then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo '编译完成'
|
|
||||||
|
|
||||||
if [[ $OS = 'windows' ]];then
|
|
||||||
zip -rq $COMPRESS_FILE $EXEC_NAME
|
|
||||||
else
|
|
||||||
tar czf $COMPRESS_FILE $EXEC_NAME
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
rm $EXEC_NAME
|
|
||||||
|
|
||||||
echo '打包完成'
|
|
||||||
echo '生成压缩文件--' $COMPRESS_FILE
|
|
|
@ -1,4 +1,6 @@
|
||||||
package cmd
|
// main gocron
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
@ -15,10 +17,24 @@ import (
|
||||||
"gopkg.in/macaron.v1"
|
"gopkg.in/macaron.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var AppVersion = "1.4"
|
||||||
|
|
||||||
// web服务器默认端口
|
// web服务器默认端口
|
||||||
const DefaultPort = 5920
|
const DefaultPort = 5920
|
||||||
|
|
||||||
var CmdWeb = cli.Command{
|
func main() {
|
||||||
|
cliApp := cli.NewApp()
|
||||||
|
cliApp.Name = "gocron"
|
||||||
|
cliApp.Usage = "gocron service"
|
||||||
|
cliApp.Version = AppVersion
|
||||||
|
cliApp.Commands = getCommands()
|
||||||
|
cliApp.Flags = append(cliApp.Flags, []cli.Flag{}...)
|
||||||
|
cliApp.Run(os.Args)
|
||||||
|
}
|
||||||
|
|
||||||
|
// getCommands
|
||||||
|
func getCommands() []cli.Command {
|
||||||
|
command := cli.Command{
|
||||||
Name: "web",
|
Name: "web",
|
||||||
Usage: "run web server",
|
Usage: "run web server",
|
||||||
Action: runWeb,
|
Action: runWeb,
|
||||||
|
@ -39,6 +55,9 @@ var CmdWeb = cli.Command{
|
||||||
Usage: "runtime environment, dev|test|prod",
|
Usage: "runtime environment, dev|test|prod",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return []cli.Command{command}
|
||||||
}
|
}
|
||||||
|
|
||||||
func runWeb(ctx *cli.Context) {
|
func runWeb(ctx *cli.Context) {
|
|
@ -1,20 +1,20 @@
|
||||||
// +build node
|
// main gocron-node
|
||||||
// 任务节点
|
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/ouqiang/gocron/modules/rpc/auth"
|
|
||||||
"github.com/ouqiang/gocron/modules/rpc/server"
|
|
||||||
"github.com/ouqiang/gocron/modules/utils"
|
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/ouqiang/gocron/modules/rpc/auth"
|
||||||
|
"github.com/ouqiang/gocron/modules/rpc/server"
|
||||||
|
"github.com/ouqiang/gocron/modules/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
const AppVersion = "1.3"
|
var AppVersion = "1.4"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var serverAddr string
|
var serverAddr string
|
25
gocron.go
25
gocron.go
|
@ -1,25 +0,0 @@
|
||||||
// +build gocron
|
|
||||||
// 调度中心
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/urfave/cli"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/ouqiang/gocron/cmd"
|
|
||||||
)
|
|
||||||
|
|
||||||
const AppVersion = "1.3"
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
app := cli.NewApp()
|
|
||||||
app.Name = "gocron"
|
|
||||||
app.Usage = "gocron service"
|
|
||||||
app.Version = AppVersion
|
|
||||||
app.Commands = []cli.Command{
|
|
||||||
cmd.CmdWeb,
|
|
||||||
}
|
|
||||||
app.Flags = append(app.Flags, []cli.Flag{}...)
|
|
||||||
app.Run(os.Args)
|
|
||||||
}
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
all: build
|
||||||
|
|
||||||
|
build: gocron node
|
||||||
|
|
||||||
|
gocron:
|
||||||
|
|
||||||
|
go build -o bin/gocron ./cmd/gocron
|
||||||
|
|
||||||
|
|
||||||
|
node:
|
||||||
|
|
||||||
|
go build -o bin/gocron-node ./cmd/node
|
||||||
|
|
||||||
|
clean:
|
||||||
|
|
||||||
|
rm bin/gocron
|
||||||
|
rm bin/gocron-node
|
|
@ -0,0 +1,33 @@
|
||||||
|
|
||||||
|
LDFLAGS = -w -s -X main.AppVersion=${VERSION}
|
||||||
|
|
||||||
|
|
||||||
|
all: build
|
||||||
|
|
||||||
|
|
||||||
|
build: gocron node
|
||||||
|
|
||||||
|
|
||||||
|
gocron:
|
||||||
|
|
||||||
|
env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./gocron_darwin_amd64/gocron ./cmd/gocron
|
||||||
|
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./gocron_linux_amd64/gocron ./cmd/gocron
|
||||||
|
env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./gocron_windows_amd64/gocron.exe ./cmd/gocron
|
||||||
|
|
||||||
|
node:
|
||||||
|
|
||||||
|
env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./gocron-node_darwin_amd64/gocron-node ./cmd/node
|
||||||
|
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./gocron-node_linux_amd64/gocron-node ./cmd/node
|
||||||
|
env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./gocron-node_windows_amd64/gocron-node.exe ./cmd/node
|
||||||
|
|
||||||
|
|
||||||
|
clean:
|
||||||
|
|
||||||
|
rm -rf gocron_darwin_amd64
|
||||||
|
rm -rf gocron_linux_amd64
|
||||||
|
rm -rf gocron_windows_amd64
|
||||||
|
|
||||||
|
rm -rf gocron-node_darwin_amd64
|
||||||
|
rm -rf gocron-node_linux_amd64
|
||||||
|
rm -rf gocron-node_windows_amd64
|
||||||
|
|
|
@ -63,7 +63,7 @@ func Read(filename string) (*Setting, error) {
|
||||||
s.ApiKey = section.Key("api.key").MustString("")
|
s.ApiKey = section.Key("api.key").MustString("")
|
||||||
s.ApiSecret = section.Key("api.secret").MustString("")
|
s.ApiSecret = section.Key("api.secret").MustString("")
|
||||||
s.ApiSignEnable = section.Key("api.sign.enable").MustBool(true)
|
s.ApiSignEnable = section.Key("api.sign.enable").MustBool(true)
|
||||||
s.ConcurrencyQueue = section.Key("concurrency.queue").MustInt(1000)
|
s.ConcurrencyQueue = section.Key("concurrency.queue").MustInt(500)
|
||||||
|
|
||||||
s.EnableTLS = section.Key("enable_tls").MustBool(false)
|
s.EnableTLS = section.Key("enable_tls").MustBool(false)
|
||||||
s.CAFile = section.Key("ca_file").MustString("")
|
s.CAFile = section.Key("ca_file").MustString("")
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#set -x -u
|
||||||
|
# 构建应用, 生成压缩包 gocron.zip或gocron.tar.gz
|
||||||
|
# ./package.sh -v 1.4
|
||||||
|
|
||||||
|
VERSION=''
|
||||||
|
GOCRON_APP_NAME='gocron'
|
||||||
|
GOCRON_NODE_APP_NAME='gocron-node'
|
||||||
|
PACKAGE_DIR='./packages'
|
||||||
|
|
||||||
|
|
||||||
|
# 用法
|
||||||
|
usage() {
|
||||||
|
echo 'usage: ./package.sh -v version'
|
||||||
|
}
|
||||||
|
|
||||||
|
# 初始化
|
||||||
|
init() {
|
||||||
|
rm -rf ${PACKAGE_DIR}
|
||||||
|
mkdir -p ${PACKAGE_DIR}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 构建应用
|
||||||
|
build() {
|
||||||
|
make -f makefile.cross-compiles VERSION=${VERSION}
|
||||||
|
|
||||||
|
if [[ $? -ne 0 ]];then
|
||||||
|
echo 'make error'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 清理
|
||||||
|
clean() {
|
||||||
|
make -f makefile.cross-compiles clean
|
||||||
|
}
|
||||||
|
|
||||||
|
# 打包gocron
|
||||||
|
package_gocron() {
|
||||||
|
local OS=$1
|
||||||
|
local GOCRON_COMPRESS_FILE=''
|
||||||
|
local PLATFORM_NAME=${GOCRON_APP_NAME}_${OS}_amd64
|
||||||
|
|
||||||
|
if [[ ! -d ${PACKAGE_DIR}/${PLATFORM_NAME} ]];then
|
||||||
|
mkdir ${PACKAGE_DIR}/${PLATFORM_NAME}
|
||||||
|
fi
|
||||||
|
|
||||||
|
for file in public templates LICENSE README.md Dockerfile-release; do
|
||||||
|
cp -r ${file} ${PLATFORM_NAME}
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ${OS} = 'windows' ]];then
|
||||||
|
GOCRON_COMPRESS_FILE=${GOCRON_APP_NAME}-v${VERSION}-${OS}-amd64.zip
|
||||||
|
zip -rq ${PACKAGE_DIR}/${PLATFORM_NAME}/${GOCRON_COMPRESS_FILE} ${PLATFORM_NAME}
|
||||||
|
else
|
||||||
|
GOCRON_COMPRESS_FILE=${GOCRON_APP_NAME}-v${VERSION}-${OS}-amd64.tar.gz
|
||||||
|
tar czf ${PACKAGE_DIR}/${PLATFORM_NAME}/${GOCRON_COMPRESS_FILE} ${PLATFORM_NAME}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 打包gocron-node
|
||||||
|
package_gocron_node() {
|
||||||
|
local OS=$1
|
||||||
|
local GOCRON_NODE_COMPRESS_FILE=''
|
||||||
|
local PLATFORM_NAME=${GOCRON_NODE_APP_NAME}_${OS}_amd64
|
||||||
|
|
||||||
|
if [[ ! -d ${PACKAGE_DIR}/${PLATFORM_NAME} ]];then
|
||||||
|
mkdir ${PACKAGE_DIR}/${PLATFORM_NAME}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${OS} = 'windows' ]];then
|
||||||
|
GOCRON_NODE_COMPRESS_FILE=${GOCRON_NODE_APP_NAME}-v${VERSION}-${OS}-amd64.zip
|
||||||
|
zip -rq ${PACKAGE_DIR}/${PLATFORM_NAME}/${GOCRON_NODE_COMPRESS_FILE} ${PLATFORM_NAME}
|
||||||
|
else
|
||||||
|
GOCRON_NODE_COMPRESS_FILE=${GOCRON_NODE_APP_NAME}-v${VERSION}-${OS}-amd64.tar.gz
|
||||||
|
tar czf ${PACKAGE_DIR}/${PLATFORM_NAME}/${GOCRON_NODE_COMPRESS_FILE} ${PLATFORM_NAME}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
package_multi() {
|
||||||
|
for os in darwin linux windows; do
|
||||||
|
package_gocron ${os}
|
||||||
|
package_gocron_node ${os}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts "v:" OPT; do
|
||||||
|
case ${OPT} in
|
||||||
|
v) VERSION=${OPTARG}
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z ${VERSION} ]]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
run() {
|
||||||
|
init
|
||||||
|
build
|
||||||
|
package_multi
|
||||||
|
clean
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
run
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ func writeConfig(form InstallForm) error {
|
||||||
"api.key", "",
|
"api.key", "",
|
||||||
"api.secret", "",
|
"api.secret", "",
|
||||||
"enable_tls", "false",
|
"enable_tls", "false",
|
||||||
"concurrency.queue", "1000",
|
"concurrency.queue", "500",
|
||||||
"ca_file", "",
|
"ca_file", "",
|
||||||
"cert_file", "",
|
"cert_file", "",
|
||||||
"key_file", "",
|
"key_file", "",
|
||||||
|
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 295 KiB After Width: | Height: | Size: 295 KiB |
|
@ -39,21 +39,21 @@ var (
|
||||||
|
|
||||||
// 并发队列
|
// 并发队列
|
||||||
type ConcurrencyQueue struct {
|
type ConcurrencyQueue struct {
|
||||||
queue chan bool
|
queue chan struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cq *ConcurrencyQueue) Push() {
|
func (cq *ConcurrencyQueue) Add() {
|
||||||
cq.queue <- true
|
cq.queue <- struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cq *ConcurrencyQueue) Pop() {
|
func (cq *ConcurrencyQueue) Done() {
|
||||||
<-cq.queue
|
<-cq.queue
|
||||||
}
|
}
|
||||||
|
|
||||||
// 任务计数
|
// 任务计数
|
||||||
type TaskCount struct {
|
type TaskCount struct {
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
exit chan bool
|
exit chan struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tc *TaskCount) Add() {
|
func (tc *TaskCount) Add() {
|
||||||
|
@ -88,7 +88,7 @@ func (i *Instance) has(key int) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Instance) add(key int) {
|
func (i *Instance) add(key int) {
|
||||||
i.m.Store(key, true)
|
i.m.Store(key, struct{}{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Instance) done(key int) {
|
func (i *Instance) done(key int) {
|
||||||
|
@ -107,8 +107,8 @@ type TaskResult struct {
|
||||||
func (task Task) Initialize() {
|
func (task Task) Initialize() {
|
||||||
serviceCron = cron.New()
|
serviceCron = cron.New()
|
||||||
serviceCron.Start()
|
serviceCron.Start()
|
||||||
concurrencyQueue = ConcurrencyQueue{queue: make(chan bool, app.Setting.ConcurrencyQueue)}
|
concurrencyQueue = ConcurrencyQueue{queue: make(chan struct{}, app.Setting.ConcurrencyQueue)}
|
||||||
taskCount = TaskCount{sync.WaitGroup{}, make(chan bool)}
|
taskCount = TaskCount{sync.WaitGroup{}, make(chan struct{})}
|
||||||
go taskCount.Wait()
|
go taskCount.Wait()
|
||||||
|
|
||||||
logger.Info("开始初始化定时任务")
|
logger.Info("开始初始化定时任务")
|
||||||
|
@ -303,21 +303,21 @@ func createJob(taskModel models.Task) cron.FuncJob {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
taskFunc := func() {
|
taskFunc := func() {
|
||||||
|
taskCount.Add()
|
||||||
|
defer taskCount.Done()
|
||||||
|
|
||||||
taskLogId := beforeExecJob(taskModel)
|
taskLogId := beforeExecJob(taskModel)
|
||||||
if taskLogId <= 0 {
|
if taskLogId <= 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCount.Add()
|
|
||||||
defer taskCount.Done()
|
|
||||||
|
|
||||||
if taskModel.Multi == 0 {
|
if taskModel.Multi == 0 {
|
||||||
runInstance.add(taskModel.Id)
|
runInstance.add(taskModel.Id)
|
||||||
defer runInstance.done(taskModel.Id)
|
defer runInstance.done(taskModel.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
concurrencyQueue.Push()
|
concurrencyQueue.Add()
|
||||||
defer concurrencyQueue.Pop()
|
defer concurrencyQueue.Done()
|
||||||
|
|
||||||
logger.Infof("开始执行任务#%s#命令-%s", taskModel.Name, taskModel.Command)
|
logger.Infof("开始执行任务#%s#命令-%s", taskModel.Name, taskModel.Command)
|
||||||
taskResult := execJob(handler, taskModel, taskLogId)
|
taskResult := execJob(handler, taskModel, taskLogId)
|
||||||
|
|
Loading…
Reference in New Issue