Планировщик задач

Вам доступен запуск периодических задач через встроенный планировщик. Вы можете привязаться к основным системным событиям или завести задачи, выполняемые в произвольное время.

Создание CRON-файла

Файлы для планировщика задач создаются в разделе "Модули" управления хаками. Файл должен начинаться с cron и через дефис - название самой задачи. Например, cron-stats.php.

В файле должна присутствовать главная функция. При создании файла из интерфейса, она добавится автоматически. Название функции должно иметь формат hack_name_cron_task, где вместо name будет название вашего хака, а вместо task - название задачи. Например, hack_proxy_cron_stats. Функция принимает на вход один параметр - объект $core.

<?php
function hack_proxy_cron_stats( $core ) {
  // Cron code here
}

Добавление файла в планировщик

Встроенный планировщик AlterCPA поддерживает четыре типа событий:

  • cron-1min - выполняется каждую минуту. Рекомендуется использовать для быстрых задач с критичном временем выполнения.
  • cron-3min - запускается раз в 3 минуты. Рекомендуется использовать для запуска длительных задач без критичного времени выполнения, например, скачивания обновлений.
  • cron-10min - запускается раз в 10 минут. Рекомендуется использовать для задач средней степени длительности, которые занимают минуты.
  • cron-1day - выполняется в полночь. Рекомендуется использовать для длительных задач, оптимизации базы, сбора статистики, очистки хранилищ и других задач длительностью в десятки минут.

Названия эти событий используются в качестве ключей в массиве инициализации. В качестве значения передаётся массив с кратким названием файлов планировщика, ответственных за это событие.

Например, добавим на ежесуточное исполнение файлы cron-stats.php и cron-emails.php, и на выполнение каждую минуту файлы cron-visits.php. Массив инициализации будет выглядеть так:

return [
  /* другие команды инициализации */
  'cron-1min' => [ 'visits' ],
  'cron-1day' => [ 'stats', 'emails' ],
];

Произвольные промежутки времени

Вы можете запускать задачи через произвольные случайные промежутки времени. Это полезно для запуска задач проверки обновлений, сбора статистики и прочих событий, выполняемых раз в несколько часов. Такие функции рекомендуется добавлять в трёхминутный блок исполнения.

Добавляем в начало функции проверку на текущее время и перенос таймера на следующий запрос:

$timer = $core->config( 'hack-proxy-stats' );
if ( $timer > time() ) return true;
$settimer = time() + rand( 1800, 3600 );
$core->reconf( 'hack-proxy-stats', $settimer );

В качестве названия поля конфигурации рекомендуется использовать название хака и функции с префиксом hack. В качестве времени переноса рекомендуется использовать случайное значение в заданном диапазоне с разбросом в несколько минут. Например, rand( 1800, 3600 ) даст перенос исполнения на полчаса-час.

Свои события планировщика

Вы можете завести свои собственные события планировщика, отличающиеся от системных. Их невозможно будет автоматически устанавливать вместе с хаком, они всегда требуют ручной установки.

Создайте файл с названием своего события в папке tasks вашей системы. Предположим, ваше событие называется crawl. В таком случае, файл будет называться crawl.php, а его содержимое будет таким:

<?php
define ( 'PATH', realpath( dirname(__FILE__) . '/../' ). '/' ) ;
require_once PATH . 'core/mods/cron.php';
crontab( 'crawl' );

Пропишите файл в планировщике сервера от имени пользователя wsvr:

crontab -e -u wsvr

Укажите там сточку планировщика в таком формате:

*/15 * * * * php -f /var/www/network.domain/tasks/crawl.php > /dev/null 2>&1

Для инициализации функций этого планировщика, используйте ключ cron-crawl.