這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
網站開始使用的是win伺服器系統計劃任務,添加 XX.bat,設定執行時間
xx.bat中的內容:
C:\php\php.exe -q C:\WWW\api\script\AutoCancelOrder.php
目前這種方式是可以正常啟動並執行,最近在看了golang以後,打算使用golang來重新計劃任務
cron.go代碼如下,go run 之前需要 go get -u github.com/jakecoffman/cron
package main
import (
"fmt"
"github.com/jakecoffman/cron"
"io/ioutil"
"net/http"
"net/url"
"os"
"time"
)
func main() {
var c = cron.New()
spec := "0 41 "
c.AddFunc(spec, func() {
autoTongji()
}, "autoTongji")
spec = "*/15 * 9-17 * * ?"c.AddFunc(spec, func() { autoFddsign()}, "autoFddsign")c.Start()select {}
}
//每日資料統計 0:30執行一次
func autoTongji() {
log := fmt.Sprintf("--Tongji 執行時間:%s, \n", time.Now().Format("2006-01-02 15:04:05"))
writelog(log)
}
//法大大簽章
func autoFddsign() {
log1 := fmt.Sprintf("--FddSign 執行時間:%s, \n", time.Now().Format("2006-01-02 15:04:05"))
writelog(log1)
}
func request(request string) (rtn string) {
u, := url.Parse(request)
q := u.Query()
q.Set("token", "site@@crontab")
u.RawQuery = q.Encode()
reponse, := http.Get(u.String())
result, _ := ioutil.ReadAll(reponse.Body)
reponse.Body.Close()
result_str := string(result)
return result_str
}
//寫入日誌
func writelog(log string) {
logdir := "log"
var path stringif os.IsPathSeparator('\\') { path = "\\"} else { path = "/"}dir, _ := os.Getwd()os.Mkdir(dir+path+logdir, os.ModePerm)file_path := dir + path + logdir + path + time.Now().Format("2006-01") + ".txt"_, err := os.Stat(file_path)if err != nil { f, _ := os.Create(file_path) defer f.Close()}f, _ := os.OpenFile(file_path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)f.WriteString(log)f.Close()
}
func checkErr(err error) {
if err != nil {
fmt.Println(err.Error())
panic(err)
}
}
運行結果查看:
TIM20170602091555.jpg
第二步使用nssm安裝和刪除服務
install.bat 安裝服務,此處要用絕對路徑
nssm install ddAuto F:\golang\src\cron.exe
nssm start ddAuto
delete.bat:刪除服務
nssm stop ddAuto
nssm remove ddAuto
代碼貼出來有點變形了。。將就這看。。。
至於 spec = "/15 9-17 ?" 時間的設定,可以參考下linux crontab的使用方法,golang cron 比 crontab多了個秒單位設定