4

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

Я хочу остановить эту работу cron по воскресеньям между 16:00 и 17:00 - после этого времени она должна начаться снова.

Как я могу написать это?

3 ответа3

4

Поместите это в начало вашего скрипта работы cron (модифицированного по мере необходимости)...

if [[ $(date +%u) -eq 7 && $(date +%H) -eq 16 ]]; then
  echo "I don't run at this time"
  exit 1
fi
echo "Something to do at other times here..."

Первый экземпляр "date" возвращает день недели (Sunday = 7), второй возвращает "час" (16 = 16.00 - 16.59). Если сценарий находит, что это в настоящее время день 7 и час 16, он завершится.

4

Как насчет:

*/5 * * * * job.sh > /dev/null

00 16 * * 0 touch /tmp/stopJob.lck
00 17 * * 0 rm -f /tmp/stopJob.lck

В job.sh просто выйдите, если файл существует:

if [ -f /tmp/stopJob.lck ] 
then 
  exit
fi
0

Вам может не понадобиться много, если ваше задание cron запускает скрипт, и вы можете проверить его на отсутствие процесса, настроенного для работы между 16:00 и 17:00 по воскресеньям.

Например, я использую задание cron каждые 15 минут, которое вызывает rsync но только если rsync еще не запущен.

Он использует команду pidof чтобы проверить, выполняется ли определенный идентификатор процесса:

PID=$(pidof rsync)

if [ -z $PID ]
then 
    rsync -avz ....
fi

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .