Better Late Than Never.

laravel schedule run 任务调度在 Windows下的另一种启动方式

关于 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文件(保存一周,会定期清理)

-- END

写的不错,赞助一下主机费

扫一扫,用支付宝赞赏
扫一扫,用微信赞赏

暂无评论~~