1 file changed +13
-3
lines changed Original file line number Diff line number Diff line change 20
20
use yii \queue \ErrorEvent ;
21
21
use yii \queue \JobEvent ;
22
22
use yii \queue \Queue ;
23
+ use yii \queue \cli \Queue as CliQueue ;
23
24
24
25
/**
25
26
* Manages service Queue.
@@ -71,10 +72,11 @@ public function actionTestErrorHandler()
71
72
72
73
private function ensureLimits ()
73
74
{
74
- if (++$ this ->executedJobsCount >= static ::MAX_EXECUTED_JOBS && function_exists ('posix_kill ' )) {
75
- $ this ->stdout ('Reached limit of ' . static ::MAX_EXECUTED_JOBS . " executed jobs. Stopping process. \n" );
76
- Signal::setExitFlag ();
75
+ if ($ this ->executedJobsCount ++ > static ::MAX_EXECUTED_JOBS && function_exists ('posix_kill ' )) {
76
+ return 15 ; // SIGTERM
77
77
}
78
+
79
+ return null ;
78
80
}
79
81
80
82
/**
@@ -102,6 +104,14 @@ private function attachEventHandlers()
102
104
$ out ("%RJob ' " . get_class ($ event ->job ) . "' finished with error:%n ' " . $ event ->error . "' \n" );
103
105
});
104
106
107
+ Event::on (Queue::class, CliQueue::EVENT_WORKER_LOOP , function (\yii \queue \cli \WorkerEvent $ event ) use ($ out ) {
108
+ $ exitCode = $ this ->ensureLimits ();
109
+ if ($ exitCode !== null ) {
110
+ $ out ('Reached limit of ' . static ::MAX_EXECUTED_JOBS . " executed jobs. Stopping process. \n" );
111
+ $ event ->exitCode = $ exitCode ;
112
+ }
113
+ });
114
+
105
115
Event::on (AbstractPackageCommand::class, AbstractPackageCommand::EVENT_BEFORE_RUN , function ($ event ) use ($ out ) {
106
116
/** @var AbstractPackageCommand $command */
107
117
$ command = $ event ->sender ;
0 commit comments