Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 以无限循环方式运行作业,睡眠时间为x秒_Php_Laravel_Queue - Fatal编程技术网

Php 以无限循环方式运行作业,睡眠时间为x秒

Php 以无限循环方式运行作业,睡眠时间为x秒,php,laravel,queue,Php,Laravel,Queue,我希望连接到api并每隔20秒更新数据库中的一些数据 所以,因为我想每20秒运行一次,所以cronjob有点棘手,我想知道我是否可以使用queue和jobs来完成这个任务 我创造了一份工作 php artisan make:job UpdateData 然后把我的代码放在UpdateData句柄中,比如 public function handle() { $options = Option::all(); foreach ($options as $option)

我希望连接到api并每隔20秒更新数据库中的一些数据

所以,因为我想每20秒运行一次,所以cronjob有点棘手,我想知道我是否可以使用queue和jobs来完成这个任务

我创造了一份工作

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();
    }
    
}
我是队列新手,如果我理解正确,我需要创建一个队列表,callqueue:work,并在代码中的某个地方分派此作业,以便队列处理该作业

但在这种情况下,我只需要每20秒运行一次作业。。。没有调度 基本上,我需要一个无限循环,它们之间有20秒的睡眠时间,在后台运行


所以我的问题是,这可能吗?如果是这样的话,我怎样才能每x秒分派一次作业。。。从命令行?

Supervisor是一个很好的解决方案,可以让脚本保持活动状态,或者您有3个选择:

  • 始终保持应用程序运行的程序
    apt install supervisor
    • 在/etc/supervisor/conf.d/new-file.conf处配置监控器
  • Laravel中的任务调度非常简单,我认为您可以在特定时间以秒为单位运行:

  • 克朗塔布 您可以选择发布以下内容: 或脚本bash


  • 所以我用了一个命令

    基本上,我已经在命令php文件中创建了一个laravel命令put
    while(true)
    循环
    ,并调用终端中的命令,我的第一条评论是,您真的需要每20秒运行一次吗?Cron以分钟为间隔运行,因此如果您能够接受这一点,那么剩下的工作就很简单了。但是如果你真的需要,我想我会使用一个shell脚本来调用你的代码,然后休眠20秒(或者20秒减去平均运行所需的时间),然后使用类似supervisord的东西来保证脚本始终在运行。虽然我很喜欢排队,但我认为它们不适合您的特定场景。thanx我将查看日程安排
    [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