diff options
author | Evgeny Zinoviev <me@ch1p.io> | 2023-04-13 02:17:19 +0300 |
---|---|---|
committer | Evgeny Zinoviev <me@ch1p.io> | 2023-04-13 02:17:19 +0300 |
commit | 7330a35806ffc1c91f0765d1fe19df2c459d5579 (patch) | |
tree | 489bad797be3bfadcb966bbfb290dd5044f74189 /src/classes | |
parent | 544f2444211aa1ad9e3611818fb87e8a8882ff55 (diff) |
add signals example
Diffstat (limited to 'src/classes')
-rw-r--r-- | src/classes/Job.php | 9 | ||||
-rw-r--r-- | src/classes/jobs.php | 21 |
2 files changed, 27 insertions, 3 deletions
diff --git a/src/classes/Job.php b/src/classes/Job.php index 4ecbf6c..56052cb 100644 --- a/src/classes/Job.php +++ b/src/classes/Job.php @@ -48,4 +48,13 @@ abstract class Job extends model { abstract public function run(); + public function __construct(array $raw) { + parent::__construct($raw); + + pcntl_async_signals(true); + pcntl_signal(SIGTERM, [$this, 'signalHandler']); + pcntl_signal(SIGINT, [$this, 'signalHandler']); + } + + protected function signalHandler(int $signal) {} }
\ No newline at end of file diff --git a/src/classes/jobs.php b/src/classes/jobs.php index 9acbc50..5010775 100644 --- a/src/classes/jobs.php +++ b/src/classes/jobs.php @@ -82,6 +82,21 @@ class jobs return self::add($target, $name, $data, Job::STATUS_MANUAL); } + public static function sendSignal(int $job_id, int $signal, string $target) + { + $client = getJobdMaster(); + $response = $client->sendSignal($job_id, $signal, $target); + + // master request failed + if (($error = $response->getError()) !== null) + throw new Exception("jobd returned error: ".$error); + + $data = $response->getData(); + $client->close(); + + return $data[$job_id]; + } + /** * Run jobs with given ids and status=Job::STATUS_MANUAL and wait for results. * @@ -198,10 +213,11 @@ class jobs /** * @param string|string[] $targets + * @throws \jobd\exceptions\JobdException + * @return bool */ - public static function poke($targets) + public static function poke($targets): bool { - $client = getJobdMaster(); if (!is_array($targets)) @@ -248,7 +264,6 @@ class jobs class job_target { - const any = "any"; public static function high(int $server): string |