【发布时间】:2019-05-29 06:34:53
【问题描述】:
我一直在对带有时区的 cron 作业进行一些测试。 我的目标是为每个时区设置 1 个 cron 作业,以便它可以独立于服务器位置运行。
package main
import (
"fmt"
"github.com/robfig/cron"
"os"
"os/signal"
"time"
)
func helloWorld() {
fmt.Println("hello world")
}
func main() {
s, err1 := cron.Parse("26 15 * * *")
fmt.Println(err1)
l, err := time.LoadLocation("Asia/Tokyo")
fmt.Println(err)
c := cron.NewWithLocation(l)
c.Schedule(s, cron.FuncJob(helloWorld))
c.Start()
sig := make(chan os.Signal)
signal.Notify(sig, os.Interrupt, os.Kill)
<-sig
}
在这里,我只是想进行测试。我希望在东京时间 15:26 看到 helloWorld。 (下午 3 点 26 分)
sig sn-p 是我在堆栈溢出时发现的,用于测试目的,这样程序在 cron 作业有时间运行之前不会关闭。
我总是提前 1 或 2 分钟设置时间,但它从来没有工作过。 知道为什么吗?
【问题讨论】:
-
如果您将其设置为提前 1-2 分钟,则问题很可能是当您更改时区时,您将其调整为过去的时间,或遥远的未来。跨度>
-
它在我居住的时区,这仍然是个问题吗?我基本上是在比我的电脑时钟测试它,提前 2 分钟。我只是手动输入亚洲/东京时区以进行测试,但我不应该需要它,因为那是我住的地方(所以那是我的电脑时钟)。
-
不管是你居住的时区。当你将“15:26”调整到任何其他时区时,它不再是“15:26”,所以不会运行你期待。
-
所以它是调整后的 15:26,而不是定义时区的 15:26?!我应该如何让它在“亚洲/东京”位置的 15:26 运行?我需要在不同的时区安排事情。东京时间 16 点 30 分,伦敦时间上午 10 点,等等......