go环境安装
下载地址: https://dl.google.com/go/go1.20.2.windows-amd64.msi
终端配置 (提示 go无法识别时)
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
go env
go env -w GO111MODULE=auto
go env -w GOSUMDB=off
go env -w GOPROXY=https://goproxy.cn,direct
实现代码(demo.go)
package main
import (
"bytes"
"fmt"
"net/http"
"os"
"path/filepath"
"github.com/robfig/cron"
// "time"
)
func main() {
// now := time.Now()
// fmt.Println(now) 打印次数时间
c := cron.New()
fmt.Println("start")
// 每周六00:00:00时执行一次任务
c.AddFunc("0 0 0 * * 6", func() {
doTask()
})
// 每周一00:00:00时执行一次任务
c.AddFunc("0 0 0 * * 1", func() {
doTask()
})
c.Start()
// 阻塞主进程,保证定时任务一直运行
select {}
}
func doTask() {
fmt.Println("task")
// 获取prometheus.yml文件的完整路径
prometheusPath, err := filepath.Abs("./prometheus.yml")
if err != nil {
fmt.Println("获取prometheus.yml文件出错:", err)
return
}
// 获取bak.yml文件的完整路径
bakPath, err := filepath.Abs("./bak.yml")
if err != nil {
fmt.Println("获取bak.yml文件出错:", err)
return
}
// 将prometheus.yml文件重命名为temp.yml
err = os.Rename(prometheusPath, filepath.Dir(prometheusPath)+"/temp.yml")
if err != nil {
fmt.Println("重命名prometheus.yml文件出错:", err)
return
}
// 将bak.yml文件重命名为prometheus.yml
err = os.Rename(bakPath, prometheusPath)
if err != nil {
fmt.Println("重命名bak.yml文件出错:", err)
return
}
// 将temp.yml文件夹改为bak.yml
err = os.Rename(filepath.Dir(prometheusPath)+"/temp.yml", filepath.Dir(bakPath)+"/bak.yml")
if err != nil {
fmt.Println("修改文件夹名称出错:", err)
return
}
// 调用post接口
resp, err := http.Post("http://XXX", "application/json", bytes.NewBuffer([]byte{}))
if err != nil {
fmt.Println("调用接口出错:", err)
return
}
// 输出接口返回结果
fmt.Println("接口返回结果:", resp.Status)
}
安装依赖
go get github.com/robfig/cron
本地运行
配置 go env -w GOOS=windows
go run demo.go
打包成二进制文件
配置go env -w GOOS="linux" 成linux系统可执行文件
go build demo.go
在linux系统运行
基本命令
ls 查看文件列表
mv x.lmy y.yml 修改文件名称
mv x.lmy /root/b 移动文件
rm x.lmy 删除文件
cat x.lmy 查看文件内容
chmod +x 赋权限
./demo 执行
nohup ./demo & 后台执行,可继续输入一般命令,退出也会继续执行
nohup ./demo>myout.log & 将输出单独存在其他文件夹,可以tail myout.log命令查看
运行成功
tail nohup.out 可查看输出
ps -ef | grep ./demo 可查看正在运行的进程
kill -9 66500 可关闭进程