2016-12-11 4 views
0

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

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

*/1 */1 * * * 

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

+0

непонятно из вашего названия, в сравнении с вами две пример даты/времени. Вы хотите запустить программу каждые '61' минут или каждые 60 минут или? На самом деле это не программирование Q для Stackoverflow. Перейдите на страницу http://superuser.com или http://unix.stackexchange.com. Удачи. – shellter

+0

Я думаю, мне нужно изменить название, Как установить crontab каждые 61 минуту – user3854431

+1

Я думаю, вы имеете в виду 13:01 вечера и 02:02 вечера. –

ответ

0

Этот метод позволяет использовать его каждые 61 минуту после задания cron.

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

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

Крон можно легко запускать каждый час, но на 61-й труднее достичь.

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

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

at now + 61 minutes < file 

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

Вот пример. Назовите этот файл Foo и пнуть Казнь в первый раз, вы можете просто запустить: ш Foo

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

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

+0

Большое вам спасибо, мне нравится вторая команда – user3854431

+0

Мое удовольствие. Если это сработает, нажмите на ответ, если не сообщите мне, что я могу сделать для дальнейшей помощи. ура! –

+0

@norcaljohnny - не downvoting, но это поведение потребует изменения в конфигурации системы благодаря тому, как работает systemd и как он заразил большинство основных дистрибутивов. https://linux.slashdot.org/story/16/05/29/212204/systemd-starts-killing-your-background-processes-by-default – ivanivan

1

В 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 на следующий день, вы можете сделать это прямо в кронтабе:

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 
Смежные вопросы