Laravel Job:如何保证单个job超长超时?
Laravel Job: how to ensure a very long timeout for a single job?
我的 webapp 有很多工作,全部 运行 好吧,除了一个。
我需要这个特定的作业存活很长时间,整整一个小时,3600 秒,如果超过时间就会失败,不要重试。
我试图在我的工作中设置这个属性
public $timeout = 3600;
public $retryAfter = 4000;
public $tries = 1;
我了解到这个特殊的作业在失败后不会重试,没关系。
但是超时and/or retryAfter 被忽略了。几分钟后,该作业被标记为失败。
我做错了什么?
另外,请问 timeout 和 retryAftrer 有什么区别?!?
关于我的背景的更多信息
我的队列由主管管理如下:
[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
This is the suggested configurations as per Lararavel's documentation.
public $timeout = 3600
只有在 运行 使用 queue:work
设置队列时才有效,但如果使用 queue:listen
则无效。
此外,在 worker
级别上,您有 --timeout
参数,您可以在其中指定工人级别的超时,而不仅仅是工作级别,例如 php artisan queue:work --timeout=3600
.
但是,您绝对应该考虑为耗时的作业设置一个单独的队列,这样该作业应该在另一个队列中排队,但所有其他不耗时的作业可以 运行 在一个队列中.
https://laravel.com/docs/7.x/queues#customizing-the-queue-and-connection
此外,timeout
定义该作业应该 运行 多长时间,retryAfter
指定它应该在多长时间后再次尝试 运行 它。当然 tries
需要设置更大的值,所以它可以重试。
希望对您有所帮助。
一份长 运行 的工作可能有几个因素导致它提前失败:
- 应用程序自己指定的超时时间
- PHP 配置指定的超时
- 队列工作者指定的超时
逐一查看您的瓶颈所在。请记住,设置因服务器而异。
我的 webapp 有很多工作,全部 运行 好吧,除了一个。
我需要这个特定的作业存活很长时间,整整一个小时,3600 秒,如果超过时间就会失败,不要重试。
我试图在我的工作中设置这个属性
public $timeout = 3600;
public $retryAfter = 4000;
public $tries = 1;
我了解到这个特殊的作业在失败后不会重试,没关系。
但是超时and/or retryAfter 被忽略了。几分钟后,该作业被标记为失败。
我做错了什么? 另外,请问 timeout 和 retryAftrer 有什么区别?!?
关于我的背景的更多信息
我的队列由主管管理如下:
[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
This is the suggested configurations as per Lararavel's documentation.
public $timeout = 3600
只有在 运行 使用 queue:work
设置队列时才有效,但如果使用 queue:listen
则无效。
此外,在 worker
级别上,您有 --timeout
参数,您可以在其中指定工人级别的超时,而不仅仅是工作级别,例如 php artisan queue:work --timeout=3600
.
但是,您绝对应该考虑为耗时的作业设置一个单独的队列,这样该作业应该在另一个队列中排队,但所有其他不耗时的作业可以 运行 在一个队列中.
https://laravel.com/docs/7.x/queues#customizing-the-queue-and-connection
此外,timeout
定义该作业应该 运行 多长时间,retryAfter
指定它应该在多长时间后再次尝试 运行 它。当然 tries
需要设置更大的值,所以它可以重试。
希望对您有所帮助。
一份长 运行 的工作可能有几个因素导致它提前失败:
- 应用程序自己指定的超时时间
- PHP 配置指定的超时
- 队列工作者指定的超时
逐一查看您的瓶颈所在。请记住,设置因服务器而异。