Учите очереди, при создании задания добавляете на момент его окончания задачу проверить, истекло ли конкретно это задание (и не обработано ли оно ещё), плюс, реализуете совет от
FeNUMe на случай если задания будут исполнены раньше срока (для этого и нужна первая проверка на то, исполнена задача или нет. В идеале ту. Бы удалить задачу из очереди, но ларавел на текущий момент этого не позволяет). Если сделаете то, что отметили решением, то когда задач не будет, ваши ресурсы будут работать вхолостую, отнимая процессорное время (на это наплевать, пока вы не перешли на оплату за ресурсы, но зачем приучаться к говнокоду?), а когда (если) сервис станет огромным и задач станет слишком много, он будет захлёбываться в задачах, очереди же равномерно распределят нагрузку и не дадут вам наговнокодить в попытке решить эту проблему, так как их можно распараллелить на несколько потоков.