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)