Я хочу, чтобы два задания выполнялись каждый день, последовательно, в том порядке, который я указал. Будет ли этот crontab надежно делать то, что я хочу?
@daily job1
@daily job2
Я предполагаю , что они бегают друг за другом, но я не смог найти ответ с помощью функции поиска в Интернете или с любой из этих страниц Справочника: cron(1)
, crontab(1)
, crontab(5)
.
Вышеприведенный crontab, очевидно, не будет делать то, что я хочу, если cron запускает операции, запланированные @daily
параллельно, или в непредсказуемом порядке.
Я знаю, что могу просто сделать один сценарий оболочки, чтобы запустить их по порядку, мне просто любопытно, как должен работать cron (и мне лень собирать тестовые данные или читать исходный код).
Cron предоставляется cron
пакетом. Операционная система - Ubuntu 10.04 LTS (сервер).
cron
пакетом? Почти все демоны cron, которые я знаю, будут обрабатывать это по порядку и синхронно, обычно сначала разбирая каждый файл в алфавитном порядке (хотя некоторые делают это по количеству времени между запусками в порядке возрастания), а затем задания внутри в порядке строк.Ответы:
После быстрого взгляда на источник (в Debian squeeze, который, я думаю, является той же версией), он выглядит как записи в данном файле и с одинаковым временем выполняется по порядку. Для этого
@daily
и0 0 * * *
есть идентичные (по сути@daily
идентичные0 0 * * *
в этом cron).Я бы не стал полагаться на это по всем направлениям. Вполне возможно, что однажды кто-нибудь решит, что cron должен выполнять задания параллельно, чтобы воспользоваться преимуществами этих 32-ядерных процессоров, в которых 31 ядро работает вхолостую. Это может быть сделано при реализации этого 20-летнего элемента todo, встречающегося в источнике cron:
Здесь очень легко написать
@daily job1; job2
. Если важно, чтобы задания выполнялись по порядку, сделайте это прямым следствием того, что вы пишете.Кроме того, постановка заказа в явном виде устраняет риск того, что будущий администратор изменит порядок строк, полагая, что это не будет иметь значения.
источник
http://ss64.com/osx/crontab.html (а также другие ссылки) говорит, что @daily эквивалентно
который говорит, чтобы бежать в полночь. Я ожидаю, что две линии такого рода будут запущены как можно ближе к полуночи, без какой-либо гарантии, какая из них будет первой. Я согласен с предложением jw013 в его комментарии:
источник
@Giles комментирует использование единственного сценария, когда он импортируется, чтобы выполнить все по порядку.
cron.daily
файлы не указывают время выполнения. По моему опыту, они работают поочередно. Это имеет смысл как можно больше фоновых заданий, которые могут выполняться на ноутбуке или другой системеКогда указано время, выполняются все задания, запланированные на текущую минуту. Это хорошая идея, чтобы использовать разные времена.
Если у вас есть задания, которые являются взаимоисключающими, обычно используется файл блокировки, чтобы определить, выполняется ли другое задание.
источник
@daily
немного отличается от/etc/cron.daily
. Первый является альтернативным синтаксисом для использования в crontab. Также посмотрите наrun-parts
. Моя система используетrun-parts
для запуска программ в/etc/cron.daily
. Согласноrun-parts(8)
справочной странице, «Файлы запускаются в лексическом порядке сортировки их имен ...».