Описание исправления контроля циклов в системе МДМ
ОБновление 2 - 18-06-21
По поводу цикла Вебсокетс
cycle_websockets.php - который не запускается править надо файл - https://github.com/sergejey/majordomo/blob/master/...
править надо вот тут - https://github.com/sergejey/majordomo/blob/master/...
и исправление надо сделать вот так
echo date("H:i:s") . " Cycle cycle_websockets.php is running " ;
Обновление 18-06-21 - убрано пару мелких недочетов...
ПЕРЕНЕСУ НАВЕРХ ОБНОВЛЕНИЕ ФАЙЛА cycle.php - вот на него Сссылка
Не секрет что бд МДМ часто долбится ненужными запросами по поводу состояния циклов - причем ИЗНАЧАЛЬНО весь этот контроль работы циклов через базу данных мускула и не предполагался .
Будем исправлять это безобразие - ибо как говорят старожилы разгрузка работы мдм от ненужных действий это уже мого плюсов к стабильности и долговечности работы Мажордомо...
файл
В данном файле(архиве) содержится сам файл cycle.php и дополнительный класс - позволяющий записывать файлы напрямую в память минуя всякие временные файлы на дисках....
Смысл переделки следующий -
Раньше в циклах передавался в систему таймштамп последней сработки цикла - через функцию сетглобал - что приводило к постоянным запросам к базе данных, новый же вариант перехватывает вывод цикла через команду есно и по определенной фразе контролирует проход цикла в цикле (простите за тавтологию)...
Поскольку все циклы имеют в себе такой код -
while (1) {
if (time() - $checked_time > 5) {
$checked_time = time();
setGlobal((str_replace('.php', '', basename(__FILE__))) . 'Run', time(), 1);
}
if (file_exists('./reboot') || isset($_GET['onetime'])) {
exit;
}
sleep(1);
}
и вот эта строка передает в систему скажем так команду о том что цикл прокрутился
setGlobal((str_replace('.php', '', basename(__FILE__))) . 'Run', time(), 1);
Но тут есть загвоздка - именно эта комнада и очень нагружает систему..
Поэтому после внесенных мною изменений эта команда заменяется на
echo date("H:i:s") . " Cycle " . basename(__FILE__) . ' is running ';
И эти данные передаются не в базу данных, а напрямую в скрипт выполняющий запуск и управление циклами - то соответственно вот тут и происходит разгрузка системы...
Описание того как и что надо сделать чтобы все это работало
Теперь после установки (замены) файлов в циклах можно провести замену 1 строкив цикле
setGlobal((str_replace('.php', '', basename(FILE))) . 'Run', time(), 1);
на
echo date("H:i:s") . " Cycle " . basename(FILE) . ' is running ';
изменяет способ контроля циклов.
Обязателен рестарт МДМ - ибо не будет работать пока не ребутнеш.
циклы со статусом - hung - если появляются таковые будут автоматически перегружатся через пять минут. А также всь вывод данного цикла при ошибке будет сохранятся в соответствующем файле лога по названию цикла.. Достаточно будет данных для исследования причины остановки цикла...
Все цыклы которые выйдут по команде ехit - автоматически запускатся не будут - ибо так было задуманно в цикле (к примеру цикл коннекта).
Также все управление циклами (запуск, рестарт, останов) - работают как и раньше с панели управления...
ДЛЯ избежания автостарта опреденных циклов -
(при условии замены в них строк как показано выше ) -
нужно отключить АВТОЗАПУСК ЦИКЛОВ в классе - systemStates
обьект - System методе - checkState
в методе
Краткая статистика от добровольца -
циклов - 19
было 121 запрос к бд
стало 44 - запроса к бд.
ПС
Не факт что у вас этот показатель будет таким же - но все же - должны быть улучшения...
И - ОБЯЗАТЕЛЬНОЕ УСЛОВИЕ - вы все делаете на свой страх и риск. Я ОТВЕТСТВЕННОСТИ НЕ НЕСУ НИКАКОЙ АБСОЛЮТНО ибо вы все делаете на свой страх и риск
ПС - забекапте для себя файл cycle.php а также всю папочку scripts - на всякий случай....
Update - 13-06-21
Перевел все циклы на стандартный вариант контроля циклов - после 12 часового теста - 98 запросов
ПППС.
теперь работает и старый вариант контроля и новый - но пристаром контроле увеличится нагрузка на бд естественно