Laravel作业:如何确保单个作业有很长的超时时间?
我的网络应用程序有大量的工作,除了一项外,所有工作都运行良好 我需要这个特殊的工作,以生存很长一段时间,整整一小时3600秒,并失败,如果随着时间的推移,不要重试 我试图在工作中设置此属性Laravel作业:如何确保单个作业有很长的超时时间?,laravel,jobs,laravel-6,Laravel,Jobs,Laravel 6,我的网络应用程序有大量的工作,除了一项外,所有工作都运行良好 我需要这个特殊的工作,以生存很长一段时间,整整一小时3600秒,并失败,如果随着时间的推移,不要重试 我试图在工作中设置此属性 public $timeout = 3600; public $retryAfter = 4000; public $tries = 1; 我得到的结论是,在失败之后,这项特殊的工作永远不会被重新尝试,这也没关系 但会忽略超时和/或retryAfter。几分钟后,作业被标记
public $timeout = 3600;
public $retryAfter = 4000;
public $tries = 1;
我得到的结论是,在失败之后,这项特殊的工作永远不会被重新尝试,这也没关系
但会忽略超时和/或retryAfter。几分钟后,作业被标记为失败
我做错了什么?
还有,请问,超时和重试有什么区别
有关我的上下文的更多信息
我的队列由主管管理,如下所示:
[program:projectname-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/appdemo.projectname.com/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/appdemo.projectname.com/storage/logs/laravel_worker.log
根据Lararavel的文件,这是建议的配置
public$timeout=3600
仅在使用queue:work
运行队列时有效,但在使用queue:listen
时无效
另外,在worker
级别上,您有--timeout
参数,您可以在worker级别上指定超时,而不仅仅是在作业级别上,就像这样php artisan queue:work--timeout=3600
但是,您应该确实考虑到对于耗时的作业有一个单独的队列,因此作业应该在另一个队列上排队,但是所有其他不耗时的作业都可以在一个队列上运行。p>
另外,timeout
定义作业应运行多长时间,而retryAfter
指定作业应在多长时间后再次运行。当然,trys
需要设置为更高的值,以便可以重试
希望这有帮助。
public$timeout=3600
仅在使用queue:work
运行队列时有效,但如果使用queue:listen
则无效
另外,在worker
级别上,您有--timeout
参数,您可以在worker级别上指定超时,而不仅仅是在作业级别上,就像这样php artisan queue:work--timeout=3600
但是,您应该确实考虑到对于耗时的作业有一个单独的队列,因此作业应该在另一个队列上排队,但是所有其他不耗时的作业都可以在一个队列上运行。p>
另外,timeout
定义作业应运行多长时间,而retryAfter
指定作业应在多长时间后再次运行。当然,trys
需要设置为更高的值,以便可以重试
希望这能有所帮助。长时间运行的作业可能有几个因素导致其过早失败:
- 应用程序本身指定的超时
- PHP配置文件指定的超时
- 队列工作程序指定的超时
看看其中的每一个,看看你的瓶颈在哪里。请记住,不同服务器的设置会有所不同。长时间运行的作业可能有几个因素影响其早期失败的原因:
- 应用程序本身指定的超时
- PHP配置文件指定的超时
- 队列工作程序指定的超时
看看其中的每一个,看看你的瓶颈在哪里。请记住,设置会因服务器而异。retryAfter不是从作业失败开始计算的,而是从作业失败或未结束开始计算的。retryAfter不是从作业失败开始计算的,而是从作业失败或未结束开始计算的。错误:retryAfter是从作业开始计算的。这就是为什么文档告诉我们要在比timeout稍长一点的时间后进行retryAfter的原因。我上次检查时,他们没有将其添加到文档中(回到5.1)。我已经把它移走了,以免引起混乱!错误:retryAfter从作业开始计算。这就是为什么文档告诉我们要在比timeout稍长一点的时间后进行retryAfter的原因。我上次检查时,他们没有将其添加到文档中(回到5.1)。我已经把它移走了,以免引起混乱!