如何为 Laravel artisan 设置超时时间

6

如何为artisan作业设置超时时间?当超时时,作业将被终止。

我在我的应用程序中使用Laravel 5.0。我在app/Console/Kernel.php中每分钟安排了一些artisan作业。 当我搜索这些作业时

ps -ef | grep artisan

似乎每个任务都在单独的进程中运行。

root 23322 1 0 13:44 ? 00:00:00 xxx/php-5.5.7/bin/php artisan fetchTopic 0 10 1

root 23324 1 0 13:44 ? 00:00:00 xxx/php-5.5.7/bin/php artisan fetchTopic 0 10 2

root 23326 1 0 13:44 ? 00:00:00 xxx/php-5.5.7/bin/php artisan fetchComment

当一个任务完成时,进程将自动被杀死。但奇怪的是,有些进程不能正常地被杀死。随着时间的推移,越来越多的奇怪进程会永久存在,导致CPU占用率达到100%。因此,我想为artisan任务设置超时时间,在超时后任务将被自动杀死。
3个回答

6
我检查了Laravel代码,没有优雅的方式来结束这些长时间运行的artisan进程。
但是,您可以自己冒风险限制php的执行时间。您可以使用函数set_time_limit()或在php.ini中添加max_execution_time进行设置。

非常感谢您的好答案。我认为这是目前一个相当不错的解决方案。 - JackYe
没有这样的功能,因为您需要编写自己稳定(在CPU和内存使用方面)命令的代码。当然,您可以通过遵循良好的编程实践并避免内存泄漏来控制脚本的执行,从而使一个命令不稳定地运行一段时间。 - andcl

2

您可以将max_execution_time作为选项进行指定。

例如,不要使用

php artisan your-slow-command

您可以使用:

php -d max_execution_time=900 artisan your-slow-command

1
我遇到了同样的问题,将cli php.ini文件中的max_input_time值更改为所需的值即可解决问题。 示例:/etc/php/7.3/cli/php.ini
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 99


1
注释中明确写着:“注意:该指令在 CLI SAPI 中硬编码为 0”,更改设置没有任何效果。 - miken32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接