laravel schedule run 任務排程在 Windows下的另一種啟動方式

hezhizheng 發表於 2020-11-22

關於 laravel 的任務排程

可移步至社群文件,這裡不做說明。

通常我們在專案中定義了一個或多個定時任務,都是在伺服器上通過 crontab 結合 artisan命令來統一管理 * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

但是在Windows環境並不支援這樣的方式,見過許多解決方案都是通過設定Windows下的定時任務(建立.bat檔案)來實現,個人認為比較繁瑣不方便,就用go寫一個小工具來替代這樣的實現方式。算是可以比較好的解決自己在Windows環境開發下對定時任務的一個除錯管理。

推薦工具

go-crontab 基於 golang 的 crontab 定時工作管理員

功能

  • 支援分鐘跟秒級
  • 內部呼叫 bash -c 命令
  • 理論上跨平臺支援 Windows 、Linux、MacOs

使用

  • 自定義json配置檔案
# 引數說明
{
  # 支援定義多個定時任務,直接在 crontab_cmd 追加物件即可
  "app": {
    "model": "s", # 預設 s 秒級 如需使用分鐘級改為 m
    "crontab_cmd": [
      {
        "crontab": "0/1 * * * * ?", #crontab 表示式
        "cmd": "go version" # 要執行的命令 
      }
    ]
  }
}
# windows 實現 laravel 的任務排程 schedule:run (只支援分鐘級別,不能定義秒級的!!!)
# app.model可以定義為s 但是對應的crontab表示式必須為每分鐘執行!可參考 Java(Quartz) 表示式書寫
# 或直接定義app.model 為 m ,則crontab表示式為 "* * * * *"
{
  "app": {
    "model": "s",
    "crontab_cmd": [
      {
        "crontab": "0 0/1 * * * ?",
        "cmd": "go version"
      },
      {
        "crontab": "0 0/1 * * * ?",
        "cmd": "cd /e/www/project/dexter/laravel-test-demo && php artisan schedule:run"
      }
    ]
  }
}
  • 編譯 (windows提供編譯好的檔案下載 releases 僅1.5M)
go build
  • 執行
    • 保證編譯的檔案與 config.json 在同級目錄
    • 執行 ./go-crontab.exe (不要關閉終端)
      free-pic
    • 執行過程會自動生成log檔案(儲存一週,會定期清理)
本作品採用《CC 協議》,轉載必須註明作者和本文連結
hezhizheng