2.12.10. Нестандартні завдання cron

В рамках cron-завдань реалізувати будь-який нестандартний інтервал або із зазначенням очікування виконання іншої команди неможливо. Сам по собі crontab може використовувати розклад тільки з точністю до хвилини, при цьому вказати певну кількість секунд не можна. Також завдання не можуть запускатися по порядку виконання, тобто чекаючи, поки закінчиться попереднє завдання і після запускати наступне. Для реалізації подібного можна скористатися корисними можливостями bash.

Для послідовного запуску двох команд необхідно вказати в завданні обидві команди, розділивши їх символом ;. Подібне вказання буде працювати як виконання черговості команд виду:

command1 ; command2 ; . ; commandn

Виконання наступної команди відбудеться в будь-якому випадку, навіть якщо попередня повернула помилку.

Якщо ж необхідно перевіряти наявність помилки або успішного виконання попередньої команди, то можна скористатися наступними роздільниками:

  • && — виконати наступну команду тільки в тому випадку, якщо попередня була виконана успішно.
  • || — виконати наступну команду тільки в тому випадку, якщо попередня НЕ була виконана успішно і повернула помилку.

Приклад використання наступний:

command1 ; command2 && command3 || command4

Виконуватися команди будуть в наступному порядку та умовах: command1 та command2 будуть виконані в будь-якому випадку, але command3 буде виконана тільки за умови, якщо command2 виконана без помилок. command4 виконається тільки в тому випадку, якщо при виконанні command3 буде повернуто помилку.

Важливі моменти:

  • cron-завдання не запускаються на самому початку хвилини, досить часто завдання може бути запущено на перших секундах хвилини або пізніше, в зв’язку з чим вказати точний час запуску проблематично.
  • Не варто ставити занадто велике значення для очікування, так як час виконання команди обмежений в рамках віртуального хостингу максимальний час виконання процесу дорівнює 1 годині, для бізнес-хостингу це значення дорівнює 4 годинам.
  • Настійно не рекомендуємо використовувати завдання з вкрай маленьким інтервалом запуску, так як це може призвести до надмірного споживання серверних ресурсів, а також є порушенням умов надання послуг п. 5.8.

Як було зазначено раніше — crontab не має можливості налаштування виконання з точністю до секунди, у зв’язку з чим доводиться вдаватися до різних хитрощів, наприклад, вказання послідовного виконання кількох команд з використанням команди очікування. Наприклад, наступна команда буде запущена через 30 секунд після її виконання:

sleep 30 ; command1

Якщо необхідно запустити два завдання в початок хвилини і в 30 секунд тієї ж хвилини, то слід додати два завдання з однаковим інтервалом, але в одну з них вказати sleep 30 ; command1, де command1 необхідне до виконання завдання. В такому випадку виконання другого завдання буде відкладено на 30 секунд.

Зміст