计划Laravel:每秒执行一条命令

Nav*_*eed 4 php cron laravel

我有一个项目,需要通过WebSockets连续发送通知。它应该连接到以字符串格式返回总体状态的设备。系统对其进行处理,然后根据各种条件发送通知。

由于调度程序可以在一分钟内重复执行任务,因此我需要找到一种每秒执行一次功能的方法。

这是我的app/Console/Kernel.php

<?php    
  ...    
class Kernel extends ConsoleKernel
{
    ...
    protected function schedule(Schedule $schedule)
    {
        $schedule->call(function(){
            // connect to the device and process its response
        })->everyMinute();
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:如果您有更好的想法来应对这种情况,请分享您的想法。

Ale*_*kov 5

通常,当您想要超过1分钟的粒度时,您必须编写一个守护程序。

我建议您尝试一下,现在不像几年前那样困难。只需从CLI命令中的简单循环开始:

while (true) {
    doPeriodicStuff();

    sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

重要的一件事:通过超级用户运行守护程序。您可以看一下有关Laravel队列侦听器设置的文章,它使用相同的方法(守护程序+监督者)。配置部分如下所示:

[program:your_daemon]
command=php artisan your:command --env=your_environment
directory=/path/to/laravel
stdout_logfile=/path/to/laravel/app/storage/logs/your_command.log
redirect_stderr=true
autostart=true
autorestart=true
Run Code Online (Sandbox Code Playgroud)