前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel 任务调度

Laravel 任务调度

作者头像
崔哥
发布2023-02-27 15:53:04
1.1K0
发布2023-02-27 15:53:04
举报
文章被收录于专栏:崔哥的专栏

过去想给一个脚本创建计划任务,得登陆服务器执行crontab -e,或编辑/etc/crontab,每加一个脚本都得重复此步骤。

现在有了任务调度,你只需在服务器上配置一条

代码语言:javascript
复制
* * * * * cd /你的项目路径 && php artisan schedule:run >> /dev/null 2>&1

后面你再加多少脚本都无需到服务器处理

定义调度

你可以在 App\Console\Kernel 类的 schedule 方法中定义所有的调度任务。

代码语言:javascript
复制
class Kernel extends ConsoleKernel
{
    protected function schedule(Schedule $schedule)
    {
        //在test环境每分钟执行一次文章发布命令,不重叠的(如果一个任务执行缓慢,即使到下一个时间点了,也要等上一个时间点到任务执行完再执行,避免重叠)
         $schedule->command('article:publish')->everyMinute()->withoutOverlapping()->environments(['testing']);
    }
...
代码语言:javascript
复制
#闭包调度
$schedule->call(function () {
            DB::table('recent_users')->delete();
        })->daily();

#除了调用闭包这种方式来调度外,你还可以调用 `可调用对象`. 可调用对象是简单的 PHP 类,包含一个 `__invoke` 方法:
$schedule->call(new DeleteRecentUsers)->daily();

查看已有的计划任务

代码语言:javascript
复制
php artisan schedule:list

Artisan 命令调度

代码语言:javascript
复制
use App\Console\Commands\SendEmailsCommand;

$schedule->command('emails:send Taylor --force')->daily();

$schedule->command(SendEmailsCommand::class, ['Taylor', '--force'])->daily();

队列任务调度

代码语言:javascript
复制
use App\Jobs\Heartbeat;

$schedule->job(new Heartbeat)->everyFiveMinutes();

// 分发任务到「heartbeats」队列及「sqs」连接...
$schedule->job(new Heartbeat, 'heartbeats', 'sqs')->everyFiveMinutes();

Shell 命令调度

代码语言:javascript
复制
$schedule->exec('node /home/forge/script.js')->daily();

调度频率选项

代码语言:javascript
复制
->daily();  每天 00:00 执行一次任务

运行调度程序

代码语言:javascript
复制
* * * * * cd /你的项目路径 && php artisan schedule:run >> /dev/null 2>&1

本地运行调度程序

代码语言:javascript
复制
php artisan schedule:work

任务输出

代码语言:javascript
复制
$schedule->command('emails:send')
         ->daily()
         ->appendOutputTo($filePath);

任务钩子

代码语言:javascript
复制
use Illuminate\Support\Stringable;

$schedule->command('emails:send')
         ->daily()
         ->onSuccess(function (Stringable $output) {
             // 任务执行成功。。。
         })
         ->onFailure(function (Stringable $output) {
             // 任务执行失败。。。
         });

Pinging 网址

代码语言:javascript
复制
$schedule->command('emails:send')
         ->daily()
         ->pingOnSuccess($successUrl)
         ->pingOnFailure($failureUrl);

参考

https://learnku.com/docs/laravel/9.x/scheduling/12238

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义调度
  • 运行调度程序
  • 任务输出
  • 任务钩子
  • 参考
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档