运行 一个无限循环的作业,休眠 x 秒

run a job as infinite loop with x sec sleep

我想连接到一个 api 并每 20 秒更新一次数据库中的一些数据

所以因为我想每 20 秒 运行 它对 cronjob 有点棘手,我想知道我是否可以为此使用队列和作业

我创造了一份工作

php artisan make:job UpdateData 

并将我的代码放入 UpdateData 句柄中,类似于

public function handle()
{
    $options = Option::all();
    foreach ($options as $option)
    {
        $data = CURL($option->url );
        $option->data = $data;
        $option->save();
    }
    
}

我是队列的新手,如果我理解正确,我需要创建一个队列 table,调用 queue:work 并在我的代码中的某处分派此作业,以便队列处理该作业

但在这种情况下,我只需要每 20 秒 运行 这项工作...没有派遣 基本上我需要一个无限循环,它们之间有 20 秒的睡眠运行在后台

所以我的问题是,这可能吗?如果是这样,我如何才能每隔 x 秒从命令行调度此作业?

Supervisor 是让你的脚本保持活力的一个很好的解决方案,或者你有 3 个选择:

  1. 始终保留您的应用程序的程序 运行ning apt install supervisor
  • 在 /etc/supervisor/conf.d/new-file.conf
  • 配置主管
[program:your-program]
process_name=%(program_name)s
command=command that you need... exemple php artisan queue:work redis
autostart=true
autorestart=true
user=secure-user
redirect_stderr=true
stdout_logfile=/var/log/script-name.log
stopwaitsecs=3600
  1. Laravel 中的任务安排非常简单,我认为您可以 运行 在特定时间和秒内: Laravel Scheduling Script

  2. Crontab 您将有一些选择 post: Cron 30 seconds 或脚本 bash.

所以我最终使用了一个命令,

基本上我创建了一个 laravel 命令,在命令 php 文件中放入 while(true) 循环 , 并在终端中调用命令