Самым плавным решением этой проблемы, о котором я могу подумать, было бы иметь дату "next_cron" где-нибудь в приложении и обновлять ее с помощью after_save
ловушки. Логика заключалась бы в том, чтобы найти самую короткую дату окончания в приложении и установить дату «next_cron» за две недели до этого. Крон либо вообще не запускается до этой даты, либо время от времени проверяет, является ли сегодня день next_cron, и либо выполняет свою задачу, либо завершает работу.
С учетом вышесказанного, я думаю, что на самом деле более эффективно запускать ваш cron ежедневно, и просто проверьте, есть ли какие-либо действия, которые нужно предпринять. Это зависит от того, сколько задач вы ожидаете поставить в систему, но, как правило, я бы предпочел, чтобы фоновый процесс занимал тридцать секунд в три часа утра, чем если бы операция с пользователем занимала 0,05 дополнительных секунды в пик. время движения.