1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
sync.php
См. документацию.
1<?php
2$_SERVER['DOCUMENT_ROOT'] = realpath(dirname(__FILE__) . '/../../../..');
3$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
4
5$childrenCount = intval($argv[1]);
6if ($childrenCount <= 0)
7{
8 die("Specify number of workers\n");
9}
10
11$mod = null;
13for ($i = 0; $i < $childrenCount; $i++)
14{
15 $children[$i] = pcntl_fork();
16 if ($children[$i] === 0)
17 {
18 $mod = $i;
19 break;
20 }
21 elseif ($children[$i] < 0)
22 {
23 //TODO finish all spawned children.
24 die("Fork failed.\n");
25 }
26}
27
28if (!isset($mod))
29{
30 while (pcntl_waitpid(0, $status) != -1)
31 {
32 $childStatus = pcntl_wexitstatus($status);
33 echo 'A Child completed with status ' . $childStatus . "\n";
34 foreach ($children as $childPid)
35 {
36 if ($childPid > 0)
37 {
38 echo 'Killing ' . $childPid . "\n";
39 posix_kill($childPid, SIGINT);
40 }
41 }
42 die("Dearest child has died.\n");
43 }
44}
45else
46{
47 define('NO_KEEP_STATISTIC', true);
48 define('NOT_CHECK_PERMISSIONS', true);
49 define('BX_CRONTAB', true);
50 define('BX_NO_ACCELERATOR_RESET', true);
51
52 require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
53 while (@ob_end_clean());
54 @set_time_limit(0);
55 @ignore_user_abort(true);
56 echo "\n";
57
58 echo 'Start@' . date('Y-m-d H:i:s')
59 . ' pid{' . getmypid() . '}'
60 . ' mod{' . $mod . '}'
61 . "\n";
62
63 if (!\Bitrix\Main\Loader::includeModule('clouds'))
64 {
65 die("Module clouds is not installed.\n");
66 }
67
69 $startTime = date('Y-m-d');
70 while ($startTime === date('Y-m-d'))
71 {
73 'filter' => [
74 '=STATUS' => 'Y',
75 '>ID' => $lastId,
76 ],
77 'limit' => $childrenCount * 200,
78 'order' => ['ID' => 'ASC']
79 ]);
80 $found = false;
81 while ($task = $taskList->fetch())
82 {
83 if (($task['ID'] % $childrenCount) == $mod)
84 {
85 do
86 {
87 $found = true;
88 if ($task['OP'] == \Bitrix\Clouds\CopyQueueTable::OP_RENAME)
89 {
91 }
92 elseif ($task['OP'] == \Bitrix\Clouds\CopyQueueTable::OP_COPY)
93 {
95 }
96 elseif ($task['OP'] == \Bitrix\Clouds\CopyQueueTable::OP_SYNC)
97 {
99 }
100 else
101 {
103 $res = 0;
104 }
105
106 echo 'task@' . date('Y-m-d H:i:s')
107 . ' pid{' . getmypid() . '}'
108 . ' mod{' . sprintf('%02d', $mod) . '}'
109 . ' ' . $task['TIMESTAMP_X']->format('Y-m-d H:i:s')
110 . ' ' . $task['OP']
111 . ' ' . $task['ID']
112 . ' ' . $res
113 . "\n";
114
116 'filter' => ['=ID' => $task['ID']],
117 ])->fetch();
118 if (!$new)
119 {
120 break;
121 }
122
123 if ($new['STATUS'] === 'N')
124 {
125 if (strpos($new['ERROR_MESSAGE'], 'source file does not exists'))
126 {
128 break;
129 }
130 }
131 }
133 }
134
135 $lastId = $task['ID'];
136 }
137
138 if (!$found)
139 {
140 $lastId = 0;
141 $deleteStatus = $mod === 0 ? CCloudFailover::ST_CONTINUE : CCloudFailover::ST_FAILOVER; # only one worker
142 for ($i = 0; $i < 60; $i++)
143 {
144 if ($deleteStatus === CCloudFailover::ST_CONTINUE)
145 {
147 'limit' => 1,
148 'order' => ['ID' => 'ASC']
149 ])->fetch();
150 if ($deleteTask)
151 {
152 $deleteStatus = CCloudFailover::executeDeleteQueue();
153 echo 'task@' . date('Y-m-d H:i:s')
154 . ' pid{' . getmypid() . '}'
155 . ' mod{' . sprintf('%02d', $mod) . '}'
156 . ' ' . $deleteTask['TIMESTAMP_X']->format('Y-m-d H:i:s')
157 . ' D'
158 . ' ' . $deleteTask['ID']
159 . ' ' . $deleteStatus
160 . "\n";
161 }
162 }
163 sleep(1);
164 }
165 }
166 }
167}
static getList(array $parameters=array())
Определения datamanager.php:431
static delete($primary)
Определения datamanager.php:1644
static executeDeleteQueue()
Определения failover.php:132
static executeRenameTask($renameTask)
Определения failover.php:442
const ST_FAILOVER
Определения failover.php:8
static executeCopyTask($copyTask, $overwrite)
Определения failover.php:219
const ST_CONTINUE
Определения failover.php:10
if($childrenCount<=0) $mod
Определения sync.php:11
$startTime
Определения sync.php:69
$children
Определения sync.php:12
$childrenCount
Определения sync.php:5
if(!\Bitrix\Main\Loader::includeModule('clouds')) $lastId
Определения sync.php:68
$new
Определения file_edit.php:48
$res
Определения filter_act.php:7
$DOCUMENT_ROOT
Определения cron_frame.php:10
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
$status
Определения session.php:10
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
die
Определения quickway.php:367
$i
Определения factura.php:643