Something like this might potentially work to catch queue job errors, regardless of what it is. Potential actions for the EVENT_AFTER_ERROR could be releasing and requeuing the job that failed.
Event::on(Queue::class,
Queue::EVENT_AFTER_ERROR,
static function(ExecEvent $event) {
$queue = Craft::$app->getQueue();
$queue->release($event->id);
$queue->delay(30)->push($event->job);
}
);
Credit to Oliver Stark from Fortrabbit for the concept: https://gist.github.com/ostark/e0444e3e231cc937a31908b651e845b3.
This came out of investigating queue job handling when certain updates or application config changes are made which causes our non-stop queue/listen worker to restart which could occur during a running queue job and cause it to error due to the SIGTERM 15 signal. You might not need the EVENT_WORKER_START event as this is more specific to the environment we have, but EVENT_AFTER_ERROR should give you access to hook into queue jobs that raised an error and do whatever handling you might want.