LINUX.ORG.RU

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

Т.е. можно настроить время выполнения (начала) команды и ее периодичность, а время конца - нет.

Поэтому если тебе нужно что-то выполнять с 20:20 по 5:40 через каждые 5 минут, то тебе придется написать скрипт, который ты будешь вызывать через cron в 20:20 каждый день, т.е. просто запускать его.

А уже в скрипте написать команды, т.е. цикл, в котором будет выполняться какая-то команда запущенная в бжкграунде, потом будет стоять ожидание в 5 минут и дальнейшее выполнение цикла, туда же можно вставить счётчик который будет отсчитывать пока не станет равным 113. Это как раз 9 часов 20 минут, поделенное на 5 минут.

Т.е. примерно такой:

I = 0
Делай пока I < 114
  Команда &
  I = I + 1
  Жди 5 минут
Продолжай
На башне или другом скриптовом языке напишешь сам.

anonymous ()

Мне больше нравится идея запускать скрипт каждые 5 минут при помощи крона, а уже внутри проверять, стоит ли делать_дело:

$ cat /etc/cron.d/my_megacronjob
*/5 * * * * username /home/username/allmighty.sh
$ cat /home/username/allmighty.sh
#!/bin/bash

### SO case used:
### https://stackoverflow.com/questions/2899110/compare-time-using-date-command

begin=$(date --date="10:20" +%s)
end=$(date --date="2:20" +%s)

midnight_begin=$(date --date="00:01" +%s)
midnight_end=$(date --date="23:59" +%s)
now=$(date +%s)

do_stuff() {
    echo "Ku-ku! Coo-coo!"
    echo "It's ${now} sec now."
}

if [[ ${begin} < ${end} ]]; then
    ###echo "Straight ->"
    if [[ ${begin} < ${now} && ${now} < ${end} ]]; then
        do_stuff
    fi
elif [[ ${begin} > ${end} ]]; then
    ###echo "Back <-"
    if [[ ${begin} < ${now} && ${now} < ${midnight_end} ]] || [[ ${midnight_begin} < ${now} && ${now} < ${end} ]]; then
        do_stuff
    fi
else
    echo "Norkoman shtole?"
    exit 1
fi
Borifed ()