1.windows任务返回结果gbk转utf8

2.windows远程任务判断是否有效命令
3.添加windows运行脚本
4.添加package构造脚本
5.更新readme.md
This commit is contained in:
linxiaozhi
2019-02-18 09:05:41 +08:00
parent 210e287c5e
commit 568e2399c0
21 changed files with 269 additions and 45 deletions

View File

@@ -33,13 +33,13 @@ V1.x版本是一个简单的定时任务管理系统进入V1.0 https://git
先看效果 先看效果
---- ----
![image](https://github.com/george518/PPGo_Job/blob/master/static/imgs/1-index.png?raw=true "github") ![image](https://github.com/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/1-index.png?raw=true "github")
![image](https://github.com/george518/PPGo_Job/blob/master/static/imgs/2-task.png?raw=true "github") ![image](https://github.com/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/2-task.png?raw=true "github")
![image](https://github.com/george518/PPGo_Job/blob/master/static/imgs/3-task_detail.png?raw=true "github") ![image](https://github.com/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/3-task_detail.png?raw=true "github")
![image](https://github.com/george518/PPGo_Job/blob/master/static/imgs/10-auth.png?raw=true "github") ![image](https://github.com/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/10-auth.png?raw=true "github")
![image](https://github.com/george518/PPGo_Job/blob/master/static/imgs/11-role.png?raw=true "github") ![image](https://github.com/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/11-role.png?raw=true "github")
![image](https://github.com/george518/PPGo_Job/blob/master/static/imgs/12-role_add.png?raw=true "github") ![image](https://github.com/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/12-role_add.png?raw=true "github")
![image](https://github.com/george518/PPGo_Job/blob/master/static/imgs/15.log.png?raw=true "github") ![image](https://github.com/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/15.log.png?raw=true "github")
安装方法 安装方法

View File

@@ -1,34 +0,0 @@
#!/bin/bash
# @Author: Bee
# @Date: 2019-02-17 08:38:58
# @Last Modified by: Bee
# @Last Modified time: 2019-02-17 08:38:58
version=$1
command -v tar >/dev/null 2>&1 || { echo >&2 "请检查tar是否已安装!"; exit 1; }
command -v go >/dev/null 2>&1 || { echo >&2 "请检查golang是否已安装或环境变量是否正确!"; exit 1; }
if [[ ! -n "$version" ]];then
echo "请执行如:"
echo "$0 1.0.0"
exit 1
fi
if [[ ! -d "build" ]];then
mkdir build
fi
go build -o PPGo_Job
cp -r -p PPGo_Job build/PPGo_Job
cp -r -p ppgo_job2.sql build/ppgo_job2.sql
cp -r -p run.sh build/run.sh
cp -r -p conf build/conf
cp -r -p static build/static
cp -r -p views build/views
rm -rf build/static/imgs
cd build && tar zcvf ../PPGo_Job-$version.tar.gz .
rm -rf ../build

View File

@@ -100,7 +100,7 @@ func NewCommandJob(id int, name string, command string) *Job {
cmd.Start() cmd.Start()
err, isTimeout := runCmdWithTimeout(cmd, timeout) err, isTimeout := runCmdWithTimeout(cmd, timeout)
return bufOut.String(), bufErr.String(), err, isTimeout return gbkAsUtf8(bufOut.String()), gbkAsUtf8(bufErr.String()), err, isTimeout
} }
return job return job
} }
@@ -280,11 +280,13 @@ func RemoteCommandJobByTelnetPassword(id int, name string, command string, serve
} }
_, err = conn.Read(buf) _, err = conn.Read(buf)
if err != nil {
return "", "", err, false
}
out = out + gbkAsUtf8(string(buf[:])) out = out + gbkAsUtf8(string(buf[:]))
if err != nil ||
strings.Contains(out, "'"+c+"' is not recognized as an internal or external command") ||
strings.Contains(out, "'"+c+"' 不是内部或外部命令,也不是可运行的程序") {
return "", "", fmt.Errorf(gbkAsUtf8(string(buf[:]))), false
}
} }
return out, "", nil, false return out, "", nil, false

209
package.sh Executable file
View File

@@ -0,0 +1,209 @@
#!/usr/bin/env bash
# @Author: ouqiang
# @Link https://github.com/ouqiang/gocron
# @Last Modified by: Bee
# @Last Modified time: 2019-02-18 10:22:13
# 生成压缩包 xx.tar.gz或xx.zip
# 使用 ./package.sh -a amd64 -p linux -v v2.0.0
# 任何命令返回非0值退出
set -o errexit
# 使用未定义的变量退出
set -o nounset
# 管道中任一命令执行失败退出
set -o pipefail
eval $(go env)
# 二进制文件名
BINARY_NAME=''
# main函数所在文件
MAIN_FILE=""
# 提取git最新tag作为应用版本
VERSION=''
# 最新git commit id
GIT_COMMIT_ID=''
# 外部输入的系统
INPUT_OS=()
# 外部输入的架构
INPUT_ARCH=()
# 未指定OS默认值
DEFAULT_OS=${GOHOSTOS}
# 未指定ARCH,默认值
DEFAULT_ARCH=${GOHOSTARCH}
# 支持的系统
SUPPORT_OS=(linux darwin windows)
# 支持的架构
SUPPORT_ARCH=(386 amd64)
# 编译参数
LDFLAGS=''
# 需要打包的文件
INCLUDE_FILE=()
# 打包文件生成目录
PACKAGE_DIR=''
# 编译文件生成目录
BUILD_DIR=''
# 获取git 最新tag name
git_latest_tag() {
local COMMIT_ID=""
local TAG_NAME=""
COMMIT_ID=`git rev-list --tags --max-count=1`
TAG_NAME=`git describe --tags "${COMMIT_ID}"`
echo ${TAG_NAME}
}
# 获取git 最新commit id
git_latest_commit() {
echo "$(git rev-parse --short HEAD)"
}
# 打印信息
print_message() {
echo "$1"
}
# 打印信息后推出
print_message_and_exit() {
if [[ -n $1 ]]; then
print_message "$1"
fi
exit 1
}
# 设置系统、CPU架构
set_os_arch() {
if [[ ${#INPUT_OS[@]} = 0 ]];then
INPUT_OS=("${DEFAULT_OS}")
fi
if [[ ${#INPUT_ARCH[@]} = 0 ]];then
INPUT_ARCH=("${DEFAULT_ARCH}")
fi
for OS in "${INPUT_OS[@]}"; do
if [[ ! "${SUPPORT_OS[*]}" =~ ${OS} ]]; then
print_message_and_exit "不支持的系统${OS}"
fi
done
for ARCH in "${INPUT_ARCH[@]}";do
if [[ ! "${SUPPORT_ARCH[*]}" =~ ${ARCH} ]]; then
print_message_and_exit "不支持的CPU架构${ARCH}"
fi
done
}
# 初始化
init() {
set_os_arch
if [[ -z "${VERSION}" ]];then
VERSION=`git_latest_tag`
fi
GIT_COMMIT_ID=`git_latest_commit`
LDFLAGS="-w -X 'main.AppVersion=${VERSION}' -X 'main.BuildDate=`date '+%Y-%m-%d %H:%M:%S'`' -X 'main.GitCommit=${GIT_COMMIT_ID}'"
PACKAGE_DIR=${BINARY_NAME}-package
BUILD_DIR=${BINARY_NAME}-build
if [[ -d ${BUILD_DIR} ]];then
rm -rf ${BUILD_DIR}
fi
# if [[ -d ${PACKAGE_DIR} ]];then
# rm -rf ${PACKAGE_DIR}
# fi
mkdir -p ${BUILD_DIR}
mkdir -p ${PACKAGE_DIR}
}
# 编译
build() {
local FILENAME=''
for OS in "${INPUT_OS[@]}";do
for ARCH in "${INPUT_ARCH[@]}";do
if [[ "${OS}" = "windows" ]];then
FILENAME=${BINARY_NAME}.exe
else
FILENAME=${BINARY_NAME}
fi
env CGO_ENABLED=0 GOOS=${OS} GOARCH=${ARCH} go build -ldflags "${LDFLAGS}" -o ${BUILD_DIR}/${BINARY_NAME}-${OS}-${ARCH}/${FILENAME} ${MAIN_FILE}
done
done
}
# 打包
package_binary() {
cd ${BUILD_DIR}
for OS in "${INPUT_OS[@]}";do
for ARCH in "${INPUT_ARCH[@]}";do
package_file ${BINARY_NAME}-${OS}-${ARCH}
if [[ "${OS}" = "windows" ]];then
zip -rq ../${PACKAGE_DIR}/${BINARY_NAME}-${VERSION}-${OS}-${ARCH}.zip ${BINARY_NAME}-${OS}-${ARCH}
else
tar czf ../${PACKAGE_DIR}/${BINARY_NAME}-${VERSION}-${OS}-${ARCH}.tar.gz ${BINARY_NAME}-${OS}-${ARCH}
fi
done
done
cd ${OLDPWD}
}
# 打包文件
package_file() {
if [[ "${#INCLUDE_FILE[@]}" = "0" ]];then
return
fi
for item in "${INCLUDE_FILE[@]}"; do
cp -r ../${item} $1
done
}
# 清理
clean() {
if [[ -d ${BUILD_DIR} ]];then
rm -rf ${BUILD_DIR}
fi
}
# 运行
run() {
init
build
package_binary
clean
}
package_ppgo_job() {
BINARY_NAME='PPGo_Job'
MAIN_FILE="./main.go"
INCLUDE_FILE=("conf" "static" "views" "ppgo_job2.sql" "run.sh" "run.bat")
run
}
# p 平台 linux darwin windows
# a 架构 386 amd64
# v 版本号 默认取git最新tag
while getopts "p:a:v:" OPT;
do
case ${OPT} in
p) IPS=',' read -r -a INPUT_OS <<< "${OPTARG}"
;;
a) IPS=',' read -r -a INPUT_ARCH <<< "${OPTARG}"
;;
v) VERSION=$OPTARG
;;
*)
;;
esac
done
package_ppgo_job

47
run.bat Normal file
View File

@@ -0,0 +1,47 @@
@shift 1
@echo off
@title PPGoJob服务
color 0A
chcp 65001
set curPath=%~dp0
:welcome
cls
echo.
echo 1.启动
echo 2.停止
echo 3.重启
echo.
set /p input= 请输入代码(选1/2/3 直接回车)
if not "%input%"=="" SET input=%input:~0,1%
if "%input%"=="1" goto start
if "%input%"=="2" goto stop
if "%input%"=="3" goto restart
cls
echo.
echo 选择无效,按任意键返回菜单
echo.
echo 现在是:%date% %time%
@pause >nul
goto welcome
:start
start "PPGo_Job" /min PPGo_Job.exe
echo 服务已启动...
pause
exit
:stop
taskkill /f /t /im PPGo_Job.exe
echo 服务已停止...
pause
exit
:restart
taskkill /f /t /im PPGo_Job.exe
start "PPGo_Job" /min PPGo_Job.exe
echo 服务已重启...
pause
exit

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 369 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 KiB