Как установить crontab каждые 1 час 1 минуту

Я хочу планировать команду каждые 1 час и 1 минуту. Например, если первая команда выполняется в 01:01, следующая команда будет выполняться в 01:02; время между выполнением команды составляет 1 час и 1 минуту.

Я пытался с помощью

*/1 */1 * * *

но это работает каждую минуту. Может кто-нибудь мне помочь?

2 ответа

Вы можете использовать этот метод, который заставляет его запускаться каждые 61 минуту после задания cron.

while true
do
  # do stuff here every 61 minutes
  sleep 61m
done

Другой вариант:

Cron может легко бегать каждый час, но достичь 61 минуты труднее.

Обычные методы включают использование команды sleep или различных довольно сложных методов в самом скрипте для запуска каждые 61 минут.

Намного проще использовать двоюродного брата cron, команду at. Команда at будет проходить через файл и запускать все команды внутри, так что вам просто нужно поместить команды в файл, по одной на строку, а затем добавить эту строку в конец файла:

at now + 61 minutes < file

Команды могут быть любым типом строки, который вы хотите использовать.

Вот пример. Вызовите этот файл foo и, чтобы запустить выполнение в первый раз, вы можете просто запустить: sh foo

date >> ~/foo_out
cd ~/tmp && rm *
at now + 61 minutes < ~/foo

Это выведет дату и время в ~/foo_out, затем перейдет в каталог tmp и вычистит файлы, а затем прикажет команде at выполнить ее снова через 61 минуту, которая снова выполнит команду at после выполнения остальных.

В crontab нет способа запланировать выполнение задания каждые 61 минуту (что, кстати, странное занятие), но вы можете сделать это косвенно.

Вы можете запланировать выполнение задания каждую минуту:

* * * * * wrapper_script

где wrapper_script вызывает нужную команду, только если текущая минута кратна 61, что-то вроде этого:

#!/bin/bash

second=$(date +%s)
minute=$((second / 60)) 
remainder=$((minute % 61))
if [[ $remainder == 0 ]] ; then
    your_command
fi

Это устанавливает $minute на количество минут с начала Unix, 1970-01-01 00:00:00 UTC. Вы можете настроить время выполнения команды, используя значение, отличное от 0 в сравнении.

Это предполагает, что вы хотите, чтобы он запускался каждые 61 минуту (это то, что вы просили). Но если вы хотите повторить ежедневный цикл, чтобы он выполнялся в 00:00, 01:01, ..., 23:23, а затем снова в 00:00 следующего дня, вы можете сделать это прямо в crontab:

 0  0 * * * your_command
 0  0 * * * your_command 
 1  1 * * * your_command 
 2  2 * * * your_command 
# ...
21 21 * * * your_command
22 22 * * * your_command 
23 23 * * * your_command
Другие вопросы по тегам