英文:
cron golang running after every 24 Hour?
问题
cron
是一个在每24小时后运行的golang程序,但是当我尝试改变系统时间时,它没有被调用。
代码:
package main;
import(
"fmt"
"strconv"
"strings"
"gopkg.in/robfig/cron.v2"
"time"
)
func Envoke_ASSET_INFO() {
fmt.Println("调用 Envoke_ASSET_INFO ", time.Now())
}
func main(){
C:=cron.New()
min:=strconv.Itoa(int(17))
h:=strconv.Itoa(int(16))
sep:="0"+" "+min+" "+h+" "+"*"+" "+"*"+" "+"*"
fmt.Println("传递给函数的规范:", sep)
C.AddFunc(sep, Envoke_ASSET_INFO )
C.Start()
select{}
}
当我运行这个程序时,它会调用我的函数。但是当我改变系统时间(+24小时)以检查下一次调用时,它没有发生。
英文:
cron
golang is running after every 24 hours but when I am trying to change the system time, it is not invoking.
code:
package main;
import(
"fmt"
"strconv"
"strings"
"gopkg.in/robfig/cron.v2"
"time"
)
func Envoke_ASSET_INFO() {
fmt.Println("Invoking Envoke_ASSET_INFO ", time.Now())
}
func main(){
C:=cron.New()
min:=strconv.Itoa(int(17))
h:=strconv.Itoa(int(16))
sep:="0"+" "+min+" "+h+" "+"*"+" "+"*"+" "+"*"
fmt.Println("SPECIFATION PASSED TO FUNCTION :", sep)
C.AddFunc(sep, Envoke_ASSET_INFO )
C.Start()
select{}
}
When I am running this program it is evoking my function. But when I change my system time (+24 hours) to check the next evoking it is not happening.
答案1
得分: 5
这不是cron的工作方式。当你改变系统时间时,cron不会运行过期的任务。想象一下,如果它按照这种方式工作,并且你在预定每5分钟运行一次的作业的2天后打开机器,会发生什么。如果你真的想以这种方式进行测试,你应该将系统时间更改为接近作业应该运行的时间,并等待看它是否运行。
就个人而言,我认为更好的做法是将小时和分钟作为参数传递,并检查作业是否在下一分钟运行或其他时间。
英文:
This is not how cron works. Cron won't run overdue tasks when you change system time. Think what would happen if it worked that way and you turned your machine on after 2 days with job scheduled to run every 5 minutes. If you really want to test it that way you should change the system time to a time just before your job is supposed to run and wait to see if it does.
Personally I think that it's a better idea to pass hour and minute as parameters and check if the job is running on next minute or something.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论