Если какая-то задача должна выполняться часто, но не обязательно точно, каковы будут преимущества использования cron сравнению с простым использованием сервиса (например, управляемого upstart) с помощью скрипта цикла, например

#!/bin/sh
while true
do
    do_task
    sleep 3600
done

?

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

Есть ли реальная польза от игры с cron в этой ситуации?

2 ответа2

1

Бег от Крона "аккуратнее". Для начала потребуется меньше ресурсов - ваш скрипт потребляет дополнительные ресурсы (на ум приходят память для оболочки, таймера и дополнительных процессов и файловых дескрипторов). Хотя машины практически безумно мощны, они просто менее элегантны.

Cron также имеет удобный способ обработки stdout -> email или what-have-you, который может быть полезен для отладки.

Если вы используете Cron, вам не нужно разбираться с разными привилегиями, просто скажите cron, какого пользователя использовать.

Конечно, использование upstart имеет некоторые преимущества - например, вам может потребоваться некоторая степень случайности в ожиданиях или график обработки, который не нравится Cron. Бывают случаи, когда подобное решение лучше, чем Cron, но я думаю, что это крайние случаи.

Например, если вы хотите запустить и остановить процесс и иметь контроль над пользователем, лучше использовать Upstart.

0

cron используется, когда вы хотите, чтобы процесс выполнялся в какое-то точное абсолютное время (т.е. 3:15 утра каждый день или каждый час в X:05 или около того), пока ваш сценарий соответствует времени, когда вы его запускаете. В вашем примере будет запускаться каждый час с момента его запуска, что должно соответствовать последовательности загрузки. Поэтому, если ваш компьютер загружается в 1:05, вы выполняете свою работу в каждый X:05, а если он загружается в 3:36, вы выполняете свою работу в X:36.

Если вы просто хотите, чтобы это делалось примерно раз в час, то это на самом деле не меняется, но, конечно, он может работать где-то между первой и последней минутой часа, в зависимости от загрузки. На самом деле, если ваш do_task - это что-то длинное, занимающее много времени, он может даже запускаться реже, чем раз в час (поскольку сон рассчитывается в конце задачи, поэтому, если do_task занимает 30 минут, do_task будет запускаться каждые 1:30 часов в вашем случае)

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

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

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