Назад | Перейти на главную страницу

Альтернатива cron

Я недоволен cron на linux.

Я мог бы решить эту проблему с помощью оберток сценариев оболочки, но это «грязно».

До сих пор я использую vixie cron по умолчанию.

Как решить эту проблему? Есть ли альтернатива vixie cron?

Взгляни на fcron:

и, конечно, для того, чтобы сделать его действительно полезным, время, оставшееся до следующего выполнения, сохраняется каждый раз, когда система останавливается. Вы также можете сказать:

выполните эту команду один раз между 2:00 и 5:00, что будет выполнено, если система будет работать в любое время в течение этого интервала.

Fcron также включает полезную систему опций, которая может применяться либо к каждой строке, следующей за объявлением, либо к отдельной строке. Некоторые из поддерживаемых опций позволяют:

  • запускать задания одно за другим (серийный номер опции fcrontab),
  • установить максимальное среднее значение загрузки системы, при котором должно выполняться задание (опция fcrontab lavg),
  • установить хорошее значение для задания (опция fcrontab nice),
  • запускать задания при запуске fcron, если они должны были выполняться во время простоя системы (опция fcrontab bootrun),

Вам нужно просто. Оставьте свои задания в @Hourly, но вместо вызова прямой команды используйте оболочку bash со следующей функцией в ней:

#! /bin/bash

# Random wait function
RANDOMWAIT=60
random_wait() {
  sleep $(( $RANDOM % ($RANDOMWAIT * 60) + 1 ))
}

run_job() {
  your-cron-command-here
}

random_wait
run_job

Это задержит выполнение на определенное время (от 1 до 60 минут). Измените RANDOMWAIT на более высокое значение для большего диапазона. ($ RANDOM - это специальная переменная оболочки в Linux и всегда является случайным целым числом)

Это обычная практика именно по той причине, которую вы описываете. Я взял этот образец кода из cron-скрипта пакета yum-cron на самом деле (находится в /etc/cron.daily.

В зависимости от того, что вы делаете, система очередей фоновых заданий может быть такой: Спасать работай?

Нет ничего «грязного» в написании оболочки-оболочки для запуска ваших заданий cron при определенных условиях, случайные интервалы не устранят ваших проблем с загрузкой.

/etc/cron.hourly/wrapper_script

в ваших условиях, например, что делать под нагрузкой.

Хотя, если вы не можете запускать свои задачи cron под нагрузкой, я бы переоценил ваши задачи cron, например, могут ли они быть смещены для запуска в другом месте, выиграют ли они от сегментирования базы данных и т. Д.

Vixie Cron поддерживает джиттер, см. Здесь (1)
Что касается пропуска на основе нагрузки, вам нужно будет это взломать, я не знаю ни одного похожего на cron инструмента, который может это сделать.