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 секунд.