Сайты

Настройка и управление Cron заданиями

A cron job runs a command on a schedule, in the background, whether or not anyone is visiting your site. This guide covers adding one in KPanel, writing the schedule and the command correctly for…

Задание cron запускает команду по расписанию в фоновом режиме, независимо от того, посещает ли кто-то ваш сайт. Это руководство охватывает добавление задания в KPanel, правильное написание расписания и команды для этой платформы, замену ненадежного встроенного планировщика WordPress и поиск выходных данных, когда задание не выполняет то, что вы ожидали.

Где находится Cron в KPanel

Cron принадлежит сайту, поэтому вы получаете доступ к нему с сайта, а не из главного меню:

  1. Войдите в KPanel и нажмите Websites на левой боковой панели.
  2. Нажмите на сайт, который хотите.
  3. В собственном меню сайта откройте Advanced, затем Cron.

Прямой адрес: /websites/<site-id>/cron. Вы увидите таблицу существующих заданий или пустое состояние, если на сайте их нет.

Cron jobs on a site in KPanel

Добавление задания

Нажмите Add Cron Job в верхнем правом углу. Форма имеет три поля.

Расписание

Шесть предустановленных кнопок заполняют выражение за вас:

КнопкаВыражение
Every minute* * * * *
Every 5 min*/5 * * * *
Every hour0 * * * *
Daily 2AM0 2 * * *
Weekly Sunday0 2 * * 0
Monthly 1st0 2 1 * *

Или введите свое в Cron expression. Пять полей в порядке: минута, час, день месяца, месяц, день недели:

minute  hour  day-of-month  month  day-of-week
  • 0 3 * * * запускается в 3:00 каждый день.
  • */15 * * * * запускается каждые пятнадцать минут.
  • 0 9 * * 1 запускается в 9:00 каждый понедельник.
  • 30 1 1 * * запускается в 1:30 в первый день каждого месяца.
  • 0 */6 * * * запускается каждые шесть часов, по часам.

Метка

Имя, которое вы узнаете позже, например WordPress cron или Nightly stock sync. Это то, что показывает таблица заданий, поэтому сделайте его описательным: job 3 никому не помогает в 2 ночи.

Команда

Команда shell для запуска. Нажмите Save для создания задания.

Используйте полные пути. Cron работает с минимальным окружением и без вашего профиля shell, поэтому bare php или относительная директория, которая работает при входе по SSH, будут молча отказывать здесь. Пишите полный путь каждый раз.

Написание команды

Задания запускаются как системный пользователь вашего сайта, поэтому ваша домашняя директория это правильный якорь и ~ разрешается корректно. Файлы вашего сайта находятся в:

~/htdocs/yourdomain.co.nz

Вы можете подтвердить точный путь на вкладке Files, затем SFTP сайта, которая его выводит под Site files.

Типичные команды:

cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
cd ~/htdocs/yourdomain.co.nz && /usr/bin/php bin/send-queued-emails.php
/usr/bin/curl -fsS https://yourdomain.co.nz/api/nightly-report

Протестируйте команду перед её расписанием. Вставьте её в раздел WordPress, затем Console сайта, если это команда wp, или запустите по SSH. Задание, которое никогда не сработает, намного легче заметить в приглашении, чем в 3 ночи в файле журнала.

Замена встроенного планировщика WordPress

WordPress поставляется с собственным псевдопланировщиком, WP-Cron, который срабатывает только при загрузке страницы. На тихом сайте запланированные посты публикуются с задержкой и письма накапливаются неотправленными. На оживленном сайте каждый посетитель платит цену проверки расписания.

Реальное задание cron решает обе проблемы. KPanel делает весь обмен за вас:

  1. Откройте сайт, затем вкладку WordPress.
  2. Откройте раздел WP-Cron.
  3. Нажмите Enable system cron.

Это добавляет расписание, которое запускает WP-Cron каждые пять минут и устанавливает DISABLE_WP_CRON чтобы загрузки страниц перестали его запускать. Remove system cron на том же экране отменяет обе части.

Если вы предпочитаете делать это вручную, это два шага:

Отключите версию, запущенную посетителем. Добавьте это в wp-config.php, выше строки /* That's all, stop editing! */, используя Files, затем File Manager:

define( 'DISABLE_WP_CRON', true );

Добавьте реальное задание. В Advanced, затем Cron:

  • Расписание: */5 * * * *
  • Метка: WordPress cron
  • Команда: cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now

Не пропускайте часть DISABLE_WP_CRON. С обеими запущенными каждая запланированная задача может срабатывать дважды: дублирующиеся письма, дублирующаяся обработка заказов, дублирующиеся платежи в плагине подписки. Используйте одноклик в разделе WP-Cron, и это не может с вами произойти.

WooCommerce и фоновые очереди

WooCommerce использует фоновую очередь для изменения статуса заказов, продления подписок, писем и обновлений запасов. Это опирается на WP-Cron, поэтому это именно та нагрузка, которая страдает на тихом магазине.

Когда реальное расписание установлено, очередь обрабатывается каждые пять минут. Наблюдайте за ней в WooCommerce, затем Status, затем Scheduled Actions в wp-admin.

Магазин с высоким объемом может переходить на */2 * * * *. Снижение ниже этого редко помогает: вы тратите больше времени на запуск процессов, чем на работу. Смотрите Setting Up WooCommerce.

Управление существующими заданиями

Таблица заданий показывает Label, Schedule, Command, Last run и Status с двумя действиями в каждой строке:

  • Disable приостанавливает задание без удаления и превращается в Enable для его возврата. Используйте это при проверке того, вызывает ли задание проблему.
  • Delete удаляет его безвозвратно. Вас попросят подтвердить, и запланированные запуски остановятся немедленно.

Удаление задания cron нельзя отменить. Расписание удаляется с сервера на месте. Если вы только пытаетесь остановить его временно, используйте Disable.

Поиск выходных данных

Каждое задание, которое создает Kapsule, имеет свои выходные данные, захваченные для вас. Стандартный вывод и ошибки добавляются в файл журнала в директорию cron-logs в домашней директории пользователя сайта, один файл на задание.

Этот журнал это ответ почти на каждый вопрос "запустилось ли мое задание?", потому что он записывает то, что напечатала команда, и любую возникшую ошибку.

Чтобы его прочитать, подключитесь по SSH и посмотрите в ~/cron-logs/. SSH использует аутентификацию по ключу, поэтому сначала добавьте ваш открытый ключ со вкладки Files, затем SSH Keys сайта: смотрите Adding SSH Keys.

File Manager и учетные записи SFTP ограничены вашей директорией сайта, ~/htdocs/yourdomain.co.nz, а cron-logs находится на один уровень выше. Это намеренно: это держит подрядчика с доступом SFTP вне всего кроме веб-сайта. Используйте нативный SSH для доступа к журналам или перенаправьте выход в вашу директорию сайта, как показано ниже.

Если вы предпочитаете иметь выходные данные где-то, где File Manager может их открыть, перенаправьте их сами:

cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now >> ~/htdocs/yourdomain.co.nz/wp-content/cron.log 2>&1

2>&1 отправляет ошибки в тот же файл, что и нормальный вывод. Без него ошибки идут в никуда.

Всё внутри вашей директории сайта может потенциально быть запрошено через веб. Поместите перенаправленный журнал под wp-content вместо корня сайта, дайте ему имя, которое никто не отгадает, и удалите его после завершения отладки.

Хорошая практика

  • Распределите ваши расписания. Шесть заданий, все установленные на 0 2 * * * начинают одновременно. Распределите их: 0 2, 10 2, 20 2.
  • Не используйте каждую минуту, если вам это действительно не нужно. */5 достаточно для почти всего, включая WordPress и WooCommerce.
  • Держите задания короткими. Задание, которое длится дольше, чем его интервал, будет совпадать со следующим запуском.
  • Перенаправляйте выход для всего шумного, чтобы одно болтливое задание не заполнило ваш диск.
  • Время от времени просматривайте список. Задания, оставленные плагином, который вы удалили, продолжают работать.

Устранение неполадок

Задание никогда, похоже, не запускается. Сначала проверьте путь. Откройте файл журнала. Затем подтвердите, что статус это Active а не Disabled. Затем запустите ту же команду по SSH и посмотрите, что она говорит.

"command not found" в журнале. Отсутствует полный путь. Используйте /usr/bin/php, /usr/bin/wp, /usr/bin/curl вместо bare имени.

Permission denied. Задание запускается как системный пользователь вашего сайта. Этот пользователь должен владеть или по крайней мере иметь возможность читать всё, к чему обращается команда. Проверьте разрешения в Using the File Manager.

Задачи WordPress всё ещё выполняются с задержкой. Подтвердите, что обе части обмена на месте: расписание существует в Advanced, затем Cron, и DISABLE_WP_CRON установлен. Раздел WP-Cron на вкладке WordPress показывает текущее состояние обеих.

Задание выполняется, но сайт медленен во время его выполнения. Переместите его на более тихий час или разделите работу на меньшие пакеты. Использование ресурсов на уровне сайта видно в Performance: смотрите Improving Website Speed.

Задание перестало работать после обновления плагина. Путь команды может измениться. Проверьте журнал, затем обновите команду из таблицы заданий, удалив старое задание и добавив исправленное.

Вам всё ещё нужна помощь?

Напишите нам на support@kapsulehost.com или откройте чат в KPanel.

Открыть KPanel
Настройка и управление Cron заданиями