torrentpier-lts/library/includes/cron/cron_run.php

129 lines
3.6 KiB
PHP
Raw Normal View History

<?php
if (!defined('BB_ROOT')) die(basename(__FILE__));
define('IN_CRON', true);
// Set SESSION vars
DB()->query("
SET SESSION
myisam_sort_buffer_size = 16*1024*1024
, bulk_insert_buffer_size = 8*1024*1024
, join_buffer_size = 4*1024*1024
, read_buffer_size = 4*1024*1024
, read_rnd_buffer_size = 8*1024*1024
, sort_buffer_size = 4*1024*1024
, tmp_table_size = 80*1024*1024
, group_concat_max_len = 1*1024*1024
");
// Restore vars at shutdown
DB()->add_shutdown_query("
SET SESSION
myisam_sort_buffer_size = DEFAULT
, bulk_insert_buffer_size = DEFAULT
, join_buffer_size = DEFAULT
, read_buffer_size = DEFAULT
, read_rnd_buffer_size = DEFAULT
, sort_buffer_size = DEFAULT
, tmp_table_size = DEFAULT
, group_concat_max_len = DEFAULT
");
// $cron_jobs obtained in cron_check.php
foreach ($cron_jobs as $job)
{
$job_script = CRON_JOB_DIR . basename($job['cron_script']);
if (file_exists($job_script))
{
$cron_start_time = utime();
$cron_runtime_log = '';
$cron_write_log = (CRON_LOG_ENABLED && (CRON_FORCE_LOG || $job['log_enabled'] >= 1));
$cron_sql_log_file = CRON_LOG_DIR .'SQL-'. basename($job['cron_script']);
if ($cron_write_log)
{
$msg = array();
$msg[] = 'start';
$msg[] = date('m-d');
$msg[] = date('H:i:s');
$msg[] = sprintf('%-4s', round(sys('la'), 1));
$msg[] = sprintf('%05d', getmypid());
$msg[] = $job['cron_title'];
$msg = join(LOG_SEPR, $msg);
bb_log($msg . LOG_LF, CRON_LOG_DIR . CRON_LOG_FILE);
}
if ($job['log_sql_queries'])
{
DB()->log_next_query(100000, $cron_sql_log_file);
}
set_time_limit(600);
require($job_script);
if ($job['log_sql_queries'])
{
DB()->log_next_query(0);
bb_log(LOG_LF, $cron_sql_log_file);
}
if ($cron_write_log)
{
$msg = array();
$msg[] = ' end';
$msg[] = date('m-d');
$msg[] = date('H:i:s');
$msg[] = sprintf('%-4s', round(sys('la'), 1));
$msg[] = sprintf('%05d', getmypid());
$msg[] = round(utime() - $cron_start_time) .'/'. round(utime() - TIMESTART) . ' sec';
$msg = join(LOG_SEPR, $msg);
$msg .= LOG_LF .'------=-------=----------=------=-------=----------';
bb_log($msg . LOG_LF, CRON_LOG_DIR . CRON_LOG_FILE);
if ($cron_runtime_log)
{
$runtime_log_file = ($job['log_file']) ? $job['log_file'] : $job['cron_script'];
bb_log($cron_runtime_log . LOG_LF, CRON_LOG_DIR . basename($runtime_log_file));
}
}
DB()->query("
UPDATE ". BB_CRON ." SET
last_run = NOW(),
run_counter = run_counter + 1,
next_run =
CASE
WHEN schedule = 'hourly' THEN
DATE_ADD(NOW(), INTERVAL 1 HOUR)
WHEN schedule = 'daily' THEN
DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL TIME_TO_SEC(run_time) SECOND)
WHEN schedule = 'weekly' THEN
DATE_ADD(
DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(NOW()) DAY), INTERVAL 7 DAY),
INTERVAL CONCAT(ROUND(run_day-1), ' ', run_time) DAY_SECOND)
WHEN schedule = 'monthly' THEN
DATE_ADD(
DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(NOW())-1 DAY), INTERVAL 1 MONTH),
INTERVAL CONCAT(ROUND(run_day-1), ' ', run_time) DAY_SECOND)
ELSE
DATE_ADD(NOW(), INTERVAL TIME_TO_SEC(run_interval) SECOND)
END
WHERE cron_id = {$job['cron_id']}
LIMIT 1
");
sleep(1);
if (utime() - TIMESTART > 600)
{
return; // чтобы daily скрипты не блокировали надолго interval'ные
}
}
else
{
$cron_err_msg = "Can not run \"{$job['cron_title']}\" : file \"$job_script\" not found". LOG_LF;
bb_log($cron_err_msg, 'cron_error');
}
}