Чи обробляються численні записи @Daily crontab послідовно, послідовно?


22

Я хочу, щоб дві роботи працювали десь щодня, серійно, в точно вказаному порядку. Чи надійно цей кронтаб робити те, що я хочу?

@daily job1
@daily job2

Я припускаю , що вони бігають один за одним, але я не зміг знайти відповідь з допомогою функції пошуку в Інтернеті або з будь-якої з цих сторінок Довідника: cron(1), crontab(1), crontab(5).

Crontab вище, очевидно, не буде робити те, що я хочу, якщо cron виконує параметри, заплановані @dailyпаралельно або в непередбачуваному порядку.

Я знаю, що можу просто зробити один сценарій оболонки, щоб звільнити їх для того, щоб мені просто цікаво, як повинен працювати крон (і я лінивий збирати дані тесту чи читати вихідний код).

Cron надається cronпакетом. ОС - Ubuntu 10.04 LTS (сервер).


Чи знаєте ви, який крон надається cronпакетом? Практично всі демони cron, які я знаю, будуть обробляти це в порядку і синхронно, як правило, спочатку розбирають кожен файл в алфавітному порядку (хоча деякі роблять це за кількістю часу між прогонами у порядку зростання), а потім завданнями всередині в порядку рядку.
Кріс Даун

5
Той факт, що він недостатньо визначений, означає, що він залишається до реалізації, і зазвичай краще не залежати від такої поведінки. Напевно, чистіше і краще організовано ставити послідовність завдань, де послідовність має значення за власним сценарієм, а не як окремі записи crontab.
jw013

@ChrisDown: Vixie Cron, я думаю. packages.ubuntu.com/lucid/cron
Адам Monsen

1
Я б запропонував, якщо ви дійсно хочете запустити їх у порядку, зробіть виконання однієї хвилини пізніше.
Кевін

@ jw013 та Кевін: погодились, але це не моє питання.
Адам Монсен

Відповіді:


26

Після швидкого огляду джерела (у видавленні Debian, який, на мою думку, є тією ж версією), він схожий на записи у певному файлі та з тим же часом виконуються в порядку. Для цього @dailyі 0 0 * * *є тотожними (насправді @dailyідентичні 0 0 * * *в цьому кроні).

Я б не покладався на це повсюдно. Можливо, одного разу хтось вирішить, що cron повинен паралельно виконувати завдання, щоб скористатися цими 32-ядерними процесорами, у яких 31 ядро ​​працює в режимі очікування. Це може бути зроблено при впровадженні цього 20-річного предмета тодо, що зустрічається у джерелі хронів:

Все це повинно бути позначеним і обмеженим навантаженням; тобто замість @hourly означає "0 * * * *" це повинно означати "близько до передньої частини кожної години, але не" до навантаження системи низьким ". (…) (Vix, jan90)

Тут дуже просто написати @daily job1; job2. Якщо важливо, щоб завдання виконувалися в порядку, зробіть це прямим наслідком того, що ви пишете.

Крім того, якщо ясне замовлення явне, виключаєте ризик того, що майбутній адміністратор переставить порядок, вважаючи, що це не має значення.


5

http://ss64.com/osx/crontab.html (як і інші посилання) говорить, що @daily еквівалентно

0 0 * * *

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

Той факт, що він недостатньо визначений, означає, що це залишається до реалізації, і зазвичай краще не залежати від такої поведінки. Напевно, чистіше і краще організовано ставити послідовність завдань, де послідовність має значення за власним сценарієм, а не як окремі записи crontab.


Це допомагає, дякую. Я згоден @ jw013 Пропозиція є дійсною, але це не питання, яке я задавав. Напевно, мені доведеться проконсультуватися з фактичним джерелом для остаточної відповіді, оскільки це, мабуть, дійсно конкретно для впровадження.
Адам Монсен

0

@Giles коментує використання одного сценарію, коли імпортується, щоб запускати речі в порядку.

cron.dailyФайли не вказують час виконання. Мій досвід, як вони працюють послідовно. Це має сенс як багато фонових завдань, які можуть працювати на ноутбуці чи іншій системі

Коли вказано час, виконуються всі завдання, заплановані на поточну хвилину. Корисно використовувати різні часи.

Якщо у вас є взаємовиключні завдання, звичайно використовувати файл блокування, щоб визначити, чи працює інша робота.


@dailyдещо відрізняється, ніж /etc/cron.daily. Перший - це альтернативний синтаксис для використання в кронтабі. Також подивіться run-parts. Моя система використовує run-partsдля запуску програм у /etc/cron.daily. За даними сторінки run-parts(8), "Файли ведуться в порядку лексичного сортування їх імен ...".
Адам Монсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.