Php 以无限循环方式运行作业,睡眠时间为x秒
我希望连接到api并每隔20秒更新数据库中的一些数据 所以,因为我想每20秒运行一次,所以cronjob有点棘手,我想知道我是否可以使用queue和jobs来完成这个任务 我创造了一份工作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)
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处配置监控器
所以我用了一个命令 基本上,我已经在命令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