Назад | Перейти на главную страницу

Запускать crontab каждые 15 минут + в определенное время в одной строке?

Короче говоря, мне нужно сделать это одной строкой:

0,15,30,45  * * * * my_command
50,55      23 * * * my_command

Я хочу запускать какую-то команду каждые 15 минут + два дополнительных раза до полуночи. Можно ли сделать это в одной строчке crontab?

Cron по своей сути очень простой планировщик.

То, что вы делаете в настоящее время, - написание двух разных расписаний, которые в совокупности достигают гораздо более сложного расписания, чем тот, который поддерживает собственный синтаксис cron, обычно является лучшим решением.

Это интуитивно понятное решение, которое другие администраторы также могут легко прочитать и понять.

Другое решение - просто запланировать более частое выполнение задания.

Затем вы должны встроить дополнительную логику в свое задание (или оболочку сценария оболочки вокруг фактического задания), которая проверяет, подходят ли условия для выполнения задания (и эти условия могут быть намного сложнее, чем просто проверка времени. ), а если их нет, изящно завершите работу.

Такой подход, проверка того, подходят ли условия в начале работы до начала фактической работы и изящный выход, когда нет, может быть, если все сделано правильно, очень мощным решением, которое решает целый ряд потенциальных проблем, которые CRON обычно не решает. не смогу обратиться.
(Например, обычная проверка высокочастотных пакетных заданий заключается в предотвращении одновременного выполнения нескольких запланированных пакетов, когда внезапно обработка одного пакета занимает намного больше времени, чем ожидалось, и не завершается до того, как cron запланировал следующую итерацию.)

В псевдокоде:

работа cron:

 * * * * * *  /path/to/wrapper_for_my_job

и

 #!/bin/your-favourite-scripting-language
 # wrapper_for_my_job: only execute my_job when the time is right


 if current_time == [0,15,30,45 minutes past the hour]
    then 
        my_job
 else if current_time == [23:50 ETC OR 23:55 UTC]
     then 
         my_job
 else
      exit 0

Вы можете попробовать эту команду:
* / 15 * * * * / путь / к / команде
Если это для конкретного пользователя, вы можете запустить его как * / 15 * * * * USER / path / to / command

Вы можете запускать cron каждые 0,15,30,45,50,55 и добавлять проверку времени в начало cron.

В противном случае нет, я не думаю, что это возможно, учитывая, что у нас мало стимулов для поддержки запутанного синтаксиса, который позволял бы это лучше, чем добавление второй строки.