Запуск PHP скриптов по расписанию Cron
Представлен простой пример запуска php скрипта по расписанию Cron с разными вариациями записи результатов выполнения в логи, передачей параметров и отслеживанием времени выполнения скрипта.
Файл index.php
:
@set_time_limit(0);
//@ignore_user_abort(true);
ini_set('memory_limit', '1024M');
// ini_set('memory_limit', -1); Совсем убрать ограничения
$path = realpath(__DIR__);
//$consoleExec = 'php -c /etc/php/8.2/cli/php.ini ';
$consoleExec = '/usr/bin/php ';
$logPath = $path . '/runtime/';
if (!is_dir($logPath)) mkdir($logPath);
try {
if (php_sapi_name() === 'cli') {
error_log(date('Y/m/d H:i:s') . ': Application start' . PHP_EOL, 3, $logPath . '/app.log');
// Code ...
$name = 'John Smith';
// Строка выполнения с параметром `name` и выводом в файл `CommandExecutionResult`
$command = $consoleExec . " /var/www/html/command.php --name='$name' > {$logPath}CommandExecutionResult.log 2>&1 &";
exec($command);
} else {
throw new Exception('Скрипт запускается Не из консоли!');
}
} catch (Exception $exception) {
die($exception->getMessage());
}
Файл command.php
:
// Отслеживаем время выполнения скрипта и размер потребляемой памяти
$start = microtime(true);
$memory = memory_get_usage();
// Записываем в лог
$log = __DIR__ . '/runtime/log.txt';
$date = date('Y/m/d H:i:s');
echo 'Старт службы...' . PHP_EOL;
$startMessage = $date . ' Запись в лог: Служба запустилась... ';
file_put_contents($log, $startMessage . PHP_EOL, FILE_APPEND);
// Принимаем параметры
$name = substr($argv[1], 7);
for ($i = 1; $i <= 10; $i++) {
echo $date . " Итерация $i для клиента $name" . PHP_EOL;
}
$endMessage = $date . ' Запись в лог: Служба остановилась... ';
file_put_contents($log, $endMessage . PHP_EOL, FILE_APPEND);
$memory = memory_get_usage() - $memory;
$name = ['байт', 'КБ', 'МБ'];
$i = 0;
while (floor($memory / 1024) > 0) {
$i++;
$memory /= 1024;
}
echo 'Время выполнения скрипта: ' . (microtime(true) - $start) . ' sec.' . PHP_EOL;
echo 'Использовано памяти: ' . round($memory, 2) . ' ' . $name[$i] . PHP_EOL;
echo 'Служба остановлена...' . PHP_EOL;
Расписание Cron:
# Запускать в 10:00 с понедельника по пятицу
0 10 * * 1-5 /usr/bin/php /var/www/html/index.php >/dev/null 2>&1
Предыдущая запись
PHP: Скачать файл по его URL
Комментарии (0)