cron.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief запуск cron задач
6  */
7 
8 ignore_user_abort(true);
9 error_reporting(0);
10 set_time_limit(90);
11 
12 /* отладочные функции */
13 require __DIR__ . '/../include/debug.php';
14 
15 /* автозагрузчик */
16 require __DIR__ . '/../vendor/autoload.php';
17 
18 /* установка переменных среды приложения */
19 new Wrong\Start\Env();
20 
21 if (!Wrong\Start\Env::$e->IS_CLI) {
22  header('Connection: close');
23  header('Content-Encoding: none');
24  header('Content-length: 0');
25 }
26 function_exists('fastcgi_finish_request') && fastcgi_finish_request();
27 
28 
29 $mem = new Wrong\Memory\Cache('env-cron');
30 if ($arr = $mem->get('env-cron')) {
32 } else {
34  Wrong\Start\Env::add($dbh->query("SELECT `name`, `value` FROM `settings`")->fetchAll(\PDO::FETCH_KEY_PAIR));
35  $mem->set('env-cron', array_map('intval', [
36  'API' => Wrong\Start\Env::$e->API,
37  'CRON_ACT' => Wrong\Start\Env::$e->CRON_ACT,
38  'CRON_CLI' => Wrong\Start\Env::$e->CRON_CLI
39  ]));
40 }
41 
42 if (Wrong\Start\Env::$e->IS_CLI && !empty($argv[1]) && is_numeric($argv[1])) { // выполнение каждой отдельной задачи, консольный запуск
43  $mem = new Wrong\Memory\Cache('cron');
44  if (!($row = $mem->get($argv[1]))) {
45  $row = Wrong\Models\Crontabs::find($argv[1]);
46  $mem->set($argv[1], $row);
47  }
49  $dbh = null;
50  exit('success');
51 }
52 
53 if (Wrong\Start\Env::$e->IS_CLI && !empty($argv[1]) && is_string($argv[1]) && is_numeric($argv[2])) { // запуск форков для поддержания потоков
54  $mem = new Wrong\Memory\Cache('cron');
55  if (!($row = $mem->get($argv[2]))) {
56  $row = Wrong\Models\Crontabs::find($argv[2]);
57  $mem->set($argv[1], $row);
58  }
60  exit;
61 }
62 
63 $dbh = null;
64 
65 if (!Wrong\Start\Env::$e->CRON_ACT) {
66  exit;
67 }
68 
69 if (!Wrong\File\Locker::lock(basename(__FILE__, '.php'), 300)) { // блокировка потока
70  goto exit_cron;
71 }
72 
74 
75 sleep(2);
76 while (date('s') != '00') {
77  usleep(400000);
78 }
79 
80 Wrong\File\Locker::unlock(basename(__FILE__, '.php')); // разблокировка потока
81 Wrong\Curl\API::req('/cron.php?' . mt_rand(), 'GET', '', [], 0.001); // автозапуск себя
82 
83 exit_cron:
static req($request, $method='GET', $data='', $headers=[], $timeout=0)
Definition: API.php:31
static getInstance($ignore_error=false)
Definition: Connect.php:50
static find($value, $column='id', $table='')
Definition: Controller.php:31
static unlock($id, $forse=false)
Definition: Locker.php:104
Cache класс, отвечающий за кеширование
Definition: Cache.php:19
Env класс управляющий, добавляющий или записывающий переменные среды
Definition: Env.php:17
static add($arr)
Definition: Env.php:110
static execute($row)
Definition: Cron.php:54
static fork($row)
Definition: Cron.php:186
static load()
Definition: Cron.php:32
if(($dbh=Connect::getInstance(true) ->dbh) && $dbh->query("SHOW TABLES") ->fetchAll() && $dbh->query("SELECT COUNT(*) FROM `users`") ->fetchColumn()) if(!empty($_POST)) exit
Definition: install.php:198
$mem
Definition: cron.php:29
if(Wrong\Start\Env::$e->IS_CLI &&!empty($argv[1]) &&is_numeric($argv[1])) if(Wrong\Start\Env::$e->IS_CLI &&!empty($argv[1]) &&is_string($argv[1]) &&is_numeric($argv[2])) $dbh
Definition: cron.php:63
$arr
Definition: actions.php:25