Как установить 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