laravel定时任务,如何改用接口调用呢?

1. 运行环境

K8S

1). 当前使用的 Laravel 版本?

5.8

2). 当前使用的 php/php-fpm 版本?

PHP 版本:7.4

php-fpm 版本:7.4

3). 当前系统

4). 业务环境

5). 相关软件版本

2. 问题描述?

目前有个问题是,项目要使用k8s部署,但是项目里有一些定时任务需要执行,想把定时任务通过调用接口的方式,每分钟调用接口,达到crontab的执行的效果。

public function index()
    {

        $res = Artisan::call('schedule:run');
        dd($res);
    }

目前代码是这样写的,我发现调用接口没有执行对应的定时任务

3. 您期望得到的结果?

如何实现通过接口执行定时任务?

4. 您实际得到的结果?

心之所向,素履以往。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

你在index接口里面直接调用,像这样exec(“php /项目路径/artisan schedule:run”);要指定到项目的具体路径,我是这么干的;
如果不配置crontab的话,通过接口控制调用脚本,就直接在接口里面加逻辑调用,调用方式就是exec(“php /项目路径/artisan command:脚本名称”);

1年前 评论
讨论数量: 12

你需要的可能是 Artisan 命令调度Artisan 命令行;两者结合就可达到你的目标

1年前 评论
lmdfx (楼主) 1年前
23tl (作者) 1年前

spatie/laravel-short-schedule 你需要这个包

1年前 评论
风中絮 1年前
exec(php artisan schedule:run)
1年前 评论

单独部署在一个服务
web 和 任务 最好拆分开

1年前 评论

你在index接口里面直接调用,像这样exec(“php /项目路径/artisan schedule:run”);要指定到项目的具体路径,我是这么干的;
如果不配置crontab的话,通过接口控制调用脚本,就直接在接口里面加逻辑调用,调用方式就是exec(“php /项目路径/artisan command:脚本名称”);

1年前 评论

用接口调用的问题是,脚本原来需要执行很长时间,但接口受nginx的最长执行时间影响。 所以,尽量不要使用接口调用,应该使用laravel自带的命令调度。这是通用的做法。

1年前 评论

我们k8s是有单独定时服务器工作的...

1年前 评论

schedule:run是每分钟执行一次任务,然后根据时间在确定是否执行配置的任务,比如每小时执行一次的任务,你不是整点访问是不会执行的

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!