go语言 引用cron编写定时任务

 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                  可关闭进程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值