Поскольку cron «не имеет состояния», он не может точно выразить «частоты», только «паттерны», которые он (очевидно) постоянно сопоставляет с текущим временем.
Перефразирование вашего вопроса делает это более очевидным: «возможно ли запускать cronjob в 00:01 каждый вечер, кроме пропущенных ночей, когда он пробежал в течение 2 ночей?» Когда cron сравнивает текущее время с шаблонами времени запроса на работу, cron не может узнать, выполнял ли он вашу работу в прошлом.
(безусловно, можно написать хрон с сохранением состояния, который записывает прошлые задания и, следовательно, включает шаблоны для сопоставления с этим состоянием, но это не стандартный крон, включенный в большинство операционных систем. Такая система усложнялась бы, если бы потребовалось ввести понятие, когда такие шаблоны «сбрасываются». Например, является ли шаблон сбрасываемым при изменении времени (то есть запись crontab пересматривается)? Посмотрите в своем любимом приложении-календаре, чтобы узнать, насколько сложно это может быть, чтобы выразить Повторяющиеся шаблоны по расписанию и обратите внимание, что у них нет проблемы сброса, потому что у начального календарного события есть естественная дата «начала» / / / «сброса». Попробуйте переназначить повторяющееся календарное событие каждую неделю, чтобы отложить на неделю Например, на Рождество. Обычно вам нужно прекратить это повторяющееся событие и перезапустить совершенно новое, что иллюстрирует ограниченную выразительность того, как даже сложные приложения календаря представляют повторяющиеся шаблоны. И, конечно, Календарь У них много состояний - каждое отдельное событие может быть удалено или перенесено независимо [в большинстве приложений календаря]).
Кроме того, вы, вероятно, хотите выполнять свою работу каждую 3-ю ночь в случае успеха , но если последняя не удалась, повторите попытку немедленно, возможно, на следующую ночь (не ждите еще 3 дня) или даже раньше Примерно через час (но перестаньте повторять попытки по прибытии утром). Очевидно, что cron не может знать, была ли ваша работа успешной, и шаблон не может также отображать альтернативное, более частое расписание «повторных попыток».
ANYWAY--
Ты можешь делать то, что хочешь сам. Напишите сценарий, скажите, чтобы cron запускал его по ночам в 00:01. Этот сценарий может проверять временную метку чего-то *, которая записывает «последний запуск», и, если это было> 3 дня назад **, выполнить задание и сбрасывать метку времени «последнего запуска».
(* этот индикатор с отметкой времени является немного постоянным состоянием, которое вы можете манипулировать и исследовать, но которое cron не может)
** будьте осторожны с арифметикой времени, если вы используете удобочитаемое время - два раза в год, в некоторые дни по 23 или 25 часов в день, и 02: 00-02: 59 происходит дважды за один день или нет вообще. Используйте UTC, чтобы избежать этого.