diff --git a/README.md b/README.md index a3ba131..651f42d 100644 --- a/README.md +++ b/README.md @@ -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/george518/PPGo_Job/blob/master/static/imgs/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/george518/PPGo_Job/blob/master/static/imgs/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/george518/PPGo_Job/blob/master/static/imgs/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/1-index.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/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/3-task_detail.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/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/11-role.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/linxiaozhi/PPGo_Job/blob/master/assets/screenshot/15.log.png?raw=true "github") 安装方法 diff --git a/build.sh b/build.sh deleted file mode 100755 index baa0eb2..0000000 --- a/build.sh +++ /dev/null @@ -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 \ No newline at end of file diff --git a/jobs/job.go b/jobs/job.go index 7bc9671..5b91c89 100644 --- a/jobs/job.go +++ b/jobs/job.go @@ -100,7 +100,7 @@ func NewCommandJob(id int, name string, command string) *Job { cmd.Start() err, isTimeout := runCmdWithTimeout(cmd, timeout) - return bufOut.String(), bufErr.String(), err, isTimeout + return gbkAsUtf8(bufOut.String()), gbkAsUtf8(bufErr.String()), err, isTimeout } return job } @@ -280,11 +280,13 @@ func RemoteCommandJobByTelnetPassword(id int, name string, command string, serve } _, err = conn.Read(buf) - if err != nil { - return "", "", err, false - } 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 diff --git a/package.sh b/package.sh new file mode 100755 index 0000000..71b1147 --- /dev/null +++ b/package.sh @@ -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 diff --git a/run.bat b/run.bat new file mode 100644 index 0000000..88ab748 --- /dev/null +++ b/run.bat @@ -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 \ No newline at end of file diff --git a/static/imgs/1-index.png b/static/imgs/1-index.png deleted file mode 100644 index 892f8fa..0000000 Binary files a/static/imgs/1-index.png and /dev/null differ diff --git a/static/imgs/10-auth.png b/static/imgs/10-auth.png deleted file mode 100644 index df1b02a..0000000 Binary files a/static/imgs/10-auth.png and /dev/null differ diff --git a/static/imgs/11-role.png b/static/imgs/11-role.png deleted file mode 100644 index 665acd0..0000000 Binary files a/static/imgs/11-role.png and /dev/null differ diff --git a/static/imgs/12-role_add.png b/static/imgs/12-role_add.png deleted file mode 100644 index f64f3f6..0000000 Binary files a/static/imgs/12-role_add.png and /dev/null differ diff --git a/static/imgs/13-admin.png b/static/imgs/13-admin.png deleted file mode 100644 index 744b127..0000000 Binary files a/static/imgs/13-admin.png and /dev/null differ diff --git a/static/imgs/14-user.png b/static/imgs/14-user.png deleted file mode 100644 index 2da326c..0000000 Binary files a/static/imgs/14-user.png and /dev/null differ diff --git a/static/imgs/15.log.png b/static/imgs/15.log.png deleted file mode 100644 index 5d81a62..0000000 Binary files a/static/imgs/15.log.png and /dev/null differ diff --git a/static/imgs/2-task.png b/static/imgs/2-task.png deleted file mode 100644 index 4ad6f04..0000000 Binary files a/static/imgs/2-task.png and /dev/null differ diff --git a/static/imgs/3-task_detail.png b/static/imgs/3-task_detail.png deleted file mode 100644 index 6e7aebb..0000000 Binary files a/static/imgs/3-task_detail.png and /dev/null differ diff --git a/static/imgs/4-task_audit.png b/static/imgs/4-task_audit.png deleted file mode 100644 index 2f271f5..0000000 Binary files a/static/imgs/4-task_audit.png and /dev/null differ diff --git a/static/imgs/5-task_group.png b/static/imgs/5-task_group.png deleted file mode 100644 index f13b150..0000000 Binary files a/static/imgs/5-task_group.png and /dev/null differ diff --git a/static/imgs/6-server_group.png b/static/imgs/6-server_group.png deleted file mode 100644 index f41784e..0000000 Binary files a/static/imgs/6-server_group.png and /dev/null differ diff --git a/static/imgs/7-server.png b/static/imgs/7-server.png deleted file mode 100644 index 82b6e8f..0000000 Binary files a/static/imgs/7-server.png and /dev/null differ diff --git a/static/imgs/7-server_add.png b/static/imgs/7-server_add.png deleted file mode 100644 index 09a2d19..0000000 Binary files a/static/imgs/7-server_add.png and /dev/null differ diff --git a/static/imgs/8-ban.png b/static/imgs/8-ban.png deleted file mode 100644 index ff93b49..0000000 Binary files a/static/imgs/8-ban.png and /dev/null differ diff --git a/static/imgs/9-ban_edit.png b/static/imgs/9-ban_edit.png deleted file mode 100644 index 1b0e6ce..0000000 Binary files a/static/imgs/9-ban_edit.png and /dev/null differ