задания 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.