2.12.2. Додавання завдання cron

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

  • cron не використовує змінну PATH, тому використовуйте повні шляхи до файлів не тільки при додаванні завдання, а й у самих скриптах, що запускаються.
  • Для запуску скриптів, які спрацьовують виключно при зверненні до них через браузер, використовуйте wget.
  • Якщо в завданні є команда cd, додайте перед нею команду pwd (наприклад, pwd; cd /path/to/dir/), інакше виникатиме помилка «nice: ‘cd’: No such file or directory».
  • При використанні в команді символу $ як простого символу (не спецсимволу) додавайте перед ним зворотний слеш \.
  • Подвійні лапки " автоматично екрануються зворотним слешем \. Це не впливає на роботу команди і не видно в списку доданих завдань, але буде видно в консолі при тестовому запуску завдання і в темі листа зі звітом при запуску за розкладом.
  • Завдання має бути завдовжки не більше 240 символів і не повинне складатися з більш ніж 15 розділених пробілами частин (наприклад, sleep 30 це 2 частини). Для запуску довгих команд поміщайте їх у Bash-скрипт і запускайте його через cron.

Автоматична зміна команди при збереженні завдання

Коли команда вказана:
  • У вигляді абсолютного шляху до файлу:
    • З розширенням .php у каталозі одного з доданих сайтів — додається шлях до інтерпретатора PHP такої ж версії, як на сайті, і шлях до конфігураційного файлу PHP цього сайту. Наприклад, завдання /home/example/example.com/www/script.php при доданому сайті www.example.com із встановленою версією PHP 8.4 перетвориться на /usr/local/php84/bin/php -c /home/example/.system/php/www.example.com.ini /home/example/example.com/www/script.php.
    • З розширенням .py — додається шлях до інтерпретатора Python останньої доступної версії вигляду /usr/bin/python3.12.
    • З розширенням .sh — додається шлях до інтерпретатора Bash /usr/bin/sh.
    • З розширенням .pl — додається шлях до інтерпретатора Perl /usr/bin/perl.
  • У вигляді URL — формується стандартна команда wget виду /usr/bin/wget -O - -q -t 1 'URL'.

В інших випадках команда додається в тому вигляді, в якому була вказана.

  1. Відкрийте розділ «Розклад завдань (cron)».
  2. Натисніть «Додати завдання».
  3. Заповніть форму та натисніть «Зберегти»:
    • «Завдання» — команда, яку потрібно запускати за розкладом. Після додавання рекомендуємо запускати її вручну, щоб переконатися в тому, що вона працює саме так, як задумано.
    • «Не намагатися знайти потрібний обробник для зазначеної команди і запускати як є» — вимикає автоматичну зміну команди при збереженні (див. примітку вище).
    • «Одночасний запуск» — що робити, якщо запущений раніше процес не встигає завершитися до запуску нового:
      • «Не запускати новий процес, якщо попередній ще працює (за замовчуванням)» — запущений процес продовжить працювати, новий не буде запущений.
      • «Під час запуску нового процесу зупиняти попередній» — запущений процес буде зупинено і запуститься новий процес.
    • «Час запуску» — час запуску завдання. Скористайтеся однією з готових попередніх установок або вкажіть свій варіант. Примітка Для зручності використовуйте наш Калькулятор cron (кнопка «Допомога в налаштуванні») або сторонні сервіси, на кшталт crontab guru.
    • «Коментар» — довільний коментар до завдання. Використовується для зручності, коли додано багато завдань.
    • «Надсилати звіти про роботу скрипта на email» — якщо увімкнено, на вказану пошту будуть надсилатися звіти про виконання завдань cron.
    • «Надсилати звіт, якщо роботу скрипта було завершено примусово під час старту нового» — якщо увімкнено, на вказану пошту будуть надсилатися звіти про зупинку запущених процесів (доступно при виборі «Під час запуску нового процесу зупиняти попередній»). ⚠️ Звіти надсилаються не частіше 1 разу на добу для кожного завдання.
    • «Email для звітів» — поштова скринька для отримання звітів (доступно при увімкненій функції надсилання звітів).
  4. Зачекайте приблизно 30-60 хвилин, поки зміни набудуть чинності.

Для зазначення часу запуску в cron використовується спеціальний синтаксис. Елементи синтаксису можна комбінувати між собою, розділяючи їх комою, наприклад: */30, 1-10, 53 — запуск завдання здійснюватиметься о: 00, 01 і всі числа до 10, 30, 53.

  • */X — запуск завдання в час, кратний зазначеному в X. */20 для хвилин це запуск на 00, 20 і 40 хвилині.
  • 1,2,3 — конкретні значення через кому. Для годин це запуск о 1, 2 і 3 годині.
  • 1-10 — інтервал значень. Для годин це запуск щогодини з 1 до 10.
  • * — будь-яке значення. Для хвилин це запуск щохвилини.

Усі додані завдання відображаються в списку:

  • «Розклад» — розклад запуску завдання в стандартному форматі cron, у підказці при наведенні виводиться в зрозумілій для людини формі.
  • «Завдання» — складається з декількох рядків:
    • Повний текст команди.
    • Коментар до завдання (якщо вказаний).
    • В останньому рядку:
      • Пошта для отримання звітів про виконання (якщо вказана).
      • Дата і час останнього запуску за розкладом (оновлюється із затримкою в декілька хвилин).
      • Тривалість останнього виконання (якщо менше 2 секунд, то виводиться з мілісекундами).
      • Код завершення команди:
        • Для коду 0 — «OK», в інших випадках — «Error» і код помилки.
        • Інформацію про те, що означає той чи інший код помилки, слід шукати в документації до команди, що запускається, а при запуску власного скрипта — дивитися логіку цього скрипта, оскільки він може повертати власні коди.
        • Натиснувши на кнопку з кодом помилки, можна переглянути останні 50 рядків або 2,5 КБ виводу команди.
  • «Керування» — кнопки керування завданням:
    • ✏️ — змінити налаштування завдання (аналогічно додаванню).
    • ▶️/⏸️ — увімкнути/вимкнути запуск завдання за розкладом.
    • ⚡️ — запустити завдання вручну. Можна використовувати для перевірки роботи команди або її дострокового запуску до настання часу за розкладом. Після запуску на сторінці з'явиться вікно консолі, де в реальному часі буде відображатися вивід команди в процесі роботи і результат її виконання (в Python за замовчуванням використовується буферизація і дані виводяться блоками по 8 КБ або після завершення роботи команди, для виводу в реальному часі в команді потрібно використовувати ключ -u, наприклад python3.10 -u file.py). Не оновлює дату і час останнього запуску в списку завдань.
    • ❌ — видалити завдання.
Зміст

    (6)