Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/clouds/tools/ |
Upload File : |
<?php $_SERVER['DOCUMENT_ROOT'] = realpath(dirname(__FILE__) . '/../../../..'); $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $childrenCount = intval($argv[1]); if ($childrenCount <= 0) { die("Specify number of workers\n"); } $mod = null; $children = []; for ($i = 0; $i < $childrenCount; $i++) { $children[$i] = pcntl_fork(); if ($children[$i] === 0) { $mod = $i; break; } elseif ($children[$i] < 0) { //TODO finish all spawned children. die("Fork failed.\n"); } } if (!isset($mod)) { while (pcntl_waitpid(0, $status) != -1) { $childStatus = pcntl_wexitstatus($status); echo 'A Child completed with status ' . $childStatus . "\n"; foreach ($children as $childPid) { if ($childPid > 0) { echo 'Killing ' . $childPid . "\n"; posix_kill($childPid, SIGINT); } } die("Dearest child has died.\n"); } } else { define('NO_KEEP_STATISTIC', true); define('NOT_CHECK_PERMISSIONS', true); define('BX_CRONTAB', true); define('BX_NO_ACCELERATOR_RESET', true); require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'; while (@ob_end_clean()); @set_time_limit(0); @ignore_user_abort(true); echo "\n"; echo 'Start@' . date('Y-m-d H:i:s') . ' pid{' . getmypid() . '}' . ' mod{' . $mod . '}' . "\n"; if (!\Bitrix\Main\Loader::includeModule('clouds')) { die("Module clouds is not installed.\n"); } $lastId = 0; $startTime = date('Y-m-d'); while ($startTime === date('Y-m-d')) { $taskList = \Bitrix\Clouds\CopyQueueTable::getList([ 'filter' => [ '=STATUS' => 'Y', '>ID' => $lastId, ], 'limit' => $childrenCount * 200, 'order' => ['ID' => 'ASC'] ]); $found = false; while ($task = $taskList->fetch()) { if (($task['ID'] % $childrenCount) == $mod) { do { $found = true; if ($task['OP'] == \Bitrix\Clouds\CopyQueueTable::OP_RENAME) { $res = CCloudFailover::executeRenameTask($task); } elseif ($task['OP'] == \Bitrix\Clouds\CopyQueueTable::OP_COPY) { $res = CCloudFailover::executeCopyTask($task, true); } elseif ($task['OP'] == \Bitrix\Clouds\CopyQueueTable::OP_SYNC) { $res = CCloudFailover::executeCopyTask($task, false); } else { \Bitrix\Clouds\CopyQueueTable::delete($task['ID']); $res = 0; } echo 'task@' . date('Y-m-d H:i:s') . ' pid{' . getmypid() . '}' . ' mod{' . sprintf('%02d', $mod) . '}' . ' ' . $task['TIMESTAMP_X']->format('Y-m-d H:i:s') . ' ' . $task['OP'] . ' ' . $task['ID'] . ' ' . $res . "\n"; $new = \Bitrix\Clouds\CopyQueueTable::getList([ 'filter' => ['=ID' => $task['ID']], ])->fetch(); if (!$new) { break; } if ($new['STATUS'] === 'N') { if (strpos($new['ERROR_MESSAGE'], 'source file does not exists')) { \Bitrix\Clouds\CopyQueueTable::delete($new['ID']); break; } } } while ($res === CCloudFailover::ST_CONTINUE); } $lastId = $task['ID']; } if (!$found) { $lastId = 0; $deleteStatus = $mod === 0 ? CCloudFailover::ST_CONTINUE : CCloudFailover::ST_FAILOVER; # only one worker for ($i = 0; $i < 60; $i++) { if ($deleteStatus === CCloudFailover::ST_CONTINUE) { $deleteTask = \Bitrix\Clouds\DeleteQueueTable::getList([ 'limit' => 1, 'order' => ['ID' => 'ASC'] ])->fetch(); if ($deleteTask) { $deleteStatus = CCloudFailover::executeDeleteQueue(); echo 'task@' . date('Y-m-d H:i:s') . ' pid{' . getmypid() . '}' . ' mod{' . sprintf('%02d', $mod) . '}' . ' ' . $deleteTask['TIMESTAMP_X']->format('Y-m-d H:i:s') . ' D' . ' ' . $deleteTask['ID'] . ' ' . $deleteStatus . "\n"; } } sleep(1); } } } }