задания cron с одинаковым временем выполнения


8

Предположим, у меня настроено несколько заданий cron для одновременного запуска: они выполняются параллельно или только одно за другим?

(Мой случай - сжатие Debian с помощью cronjobs, помещенных в /etc/cron.d/mycronjobs).

Ответы:


7

Для полноты задания, например, в /etc/cron. enjhourly,daily,weekly,monthly} выполняются последовательно. Скрипт run-parts перебирает все файлы в этом каталоге.

02 4 * * * root run-parts /etc/cron.daily

Таким образом, вы можете использовать это в сочетании с соглашением об именах (аналогично нумерации в /etc/init.d/rc*.d), чтобы убедиться, что задания выполняются последовательно.


Что если у меня есть несколько заданий cron в одном файле, настроенных на одновременное выполнение?
— Габриэле

Я не уверен, что вы подразумеваете под "в одном файле". Но если вы имеете в виду, что у вас есть несколько строк с одной и той же спецификацией времени (как 0 * * * *вы опубликовали ранее), то, поскольку другие опубликовали, нет никакой гарантии относительно порядка, в котором они будут работать. Они могут работать параллельно в многоядерной системе, AFAIK порядок, в котором они работают, может даже отличаться каждый день. Соглашение об именах, которое я упомянул в сочетании с частями выполнения или использованием основного сценария, который вызывает фактические сценарии резервного копирования, является единственным способом обеспечить выполнение сценариев в определенном порядке.
— Брэм,

Хорошо, тогда, поскольку я должен быть уверен, что мои скрипты будут запускаться один за другим, я думаю, что я пойду на «главный скрипт», запускаемый заданием cron, и вызову любые скрипты из основного скрипта.
— Габриэле

5

Задачи, перечисленные в cron, будут выполняться параллельно, как это обычно делают процессы. Нет никакого способа быть уверенным в том, что начнется первым, и в cron нет способа убедиться, что задание A завершено до запуска задания B.


1
Вы можете убедиться, что задача A завершена, прежде чем задача B начнется, перечислив их в одной строке и разделив их точкой с запятой.
— Николай

Это не означает, что задача А успешно выполнена. Возможно, вы могли бы использовать &&, но что-то подобное должно быть выполнено с помощью вызываемого скрипта.
— Sirch

Вы можете использовать любые операнды, которые поддерживает оболочка bash. Использование &&, || или; в cron это обычная практика по моему опыту.
— Николай

2

Cron - это демон (сервис), который работает непрерывно; однако, он читает crontabs раз в минуту.

Точная последовательность выполнения заданий будет зависеть от реализации crond вашей системы.

Свободные файлы, которые некоторые дистрибутивы помещают в /etc/cron.d/, сканируются на предмет настроек таймера cron, поскольку эти файлы следуют обычному синтаксису crontab (5).

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


Что делать, если расписание установлено так: ---- 0 * * * * root sh / var / opt / backup_scripts / backup1 - 0 * * * * root sh / var / opt / backup_scripts / backup2 ---- Будут ли они запустить последовательно, т.е. backup1 и, когда закончите, backup2?
— Габриэле

Точная последовательность выполнения заданий будет зависеть от реализации crond вашей системы. Man Cron для деталей.
— Адаптер

man cron ничего не говорит об этом (по крайней мере, в Debian).
— Габриэле

2

Они будут работать параллельно. Вы можете использовать следующие методы для последовательного запуска процессов.

# Use a semicolon to run command2 after command1 has completed
02 4 * * * /path/to/command1 ; /path/to/command2

# Use two ampersands to run command2 after command1 has completed successfully.
02 4 * * * /path/to/command1 && /path/to/command2

# Use two vertical rules to run command2 after command1 has completed unsuccessfully.
02 4 * * * /path/to/command1 || /path/to/command2
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.