环境说明

  • Centos 8.5.2111
  • Golang 1.17.6
  • Supervisor

步骤说明

Supervisor 安装

# centos
yum install supervisor -y
systemctl start supervisord

# ubuntu
apt-get install -y supervisor
service supervisor start

Golang

示例代码

config.yaml

env:
domain: http://www.axinblog.com

一个简单的定时任务

package main

import (
"fmt"
"github.com/robfig/cron/v3"
"github.com/spf13/viper"
"io/ioutil"
"net/http"
)

func main() {
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
viper.AddConfigPath("./config")
err := viper.ReadInConfig()
if err != nil {
panic(fmt.Errorf("fatal error config file: %w", err))
}

// 请求地址
domain := viper.GetString("env.domain")

// 定时
c := cron.New(cron.WithSeconds())

// 自动关闭订单
c.AddFunc("@every 10s", func() {
path := "/index/api/close_order"
resp, err := http.Get(domain + path)
if err != nil {
fmt.Println(err.Error())
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
})

c.Start()

select {}
}

测试

打包

注:Env 中为 GOARCH=amd64;GOOS=linux

部署

上传二进制main到运行目录

chmod +x main 赋予执行权限

supervisor 配置

[program:main]
directory=/data/wwwroot/aixnblog/server
command=/data/wwwroot/aixnblog/server/main
user=root
autostart=true
autorestart=true
stderr_logfile=/root/logs/main_error.log
stdout_logfile=/root/logs/main.log

启动

# 更新配置
supervisorctl update
# 启动
supervisorctl start main