Страница 1 из 4

Управление циклами (сервисами)

Добавлено: Пн окт 17, 2016 5:00 pm
sergejey
В последнем обновлении добавилась функция мониторинга работы циклов и управления их работой. Интерфейс доступен через раздел XRay->Services

Изображение

Функция полезна в первую очередь разработчикам, которые создают свои модули, использующие фоновые циклы.
Вручную можно запустить/остановить цикл, а так же запретить его автозапуск (DISABLED) или же включить само-восстановление (AUTO-RECOVERY). Последнее позволяет системе автоматически перезапустить цикл, если он по какой-то причине закроется.

Кроме ручного управления, доступно управление циклами из кода, что может быть полезно, когда при изменении настроек модуля требуется перезапуск связанного с ним цикла. Для управления циклом использются глобальные переменные.

Например, есть цикл ./scripts/cycle_ping.php. Чтобы его остановить, достаточно выполнить команду в коде:

Код: Выделить всё

setGlobal('cycle_pingControl','stop');
Для запуска:

Код: Выделить всё

setGlobal('cycle_pingControl','start');
Для рестарта:

Код: Выделить всё

setGlobal('cycle_pingControl','restart');
Для запрета автозапуска (по-умолчанию он всегда разрешён):

Код: Выделить всё

setGlobal('cycle_pingDisabled','1');
Для включения авто-восстановления (по-умолчанию он всегда выключен):

Код: Выделить всё

setGlobal('cycle_pingAutoRestart','1');

Re: Управление циклами (сервисами)

Добавлено: Вт окт 18, 2016 3:20 pm
ipz
Опечатка в строке для запуска

Re: Управление циклами (сервисами)

Добавлено: Пн ноя 07, 2016 12:01 am
GreatBAO
видимо из за этого обновления, после запуска cyrcle.php в лог прет запуск всех циклов по кругу раз 40-50 ?

Код: Выделить всё

23:58:00 working thread: cycle_execs.php
23:58:00 working thread: cycle_states.php
23:58:00 working thread: cycle_rss.php
23:58:00 working thread: cycle_websockets.php
23:58:00 working thread: cycle_scheduler.php
23:58:00 working thread: cycle_ping.php
23:58:00 working thread: cycle_main.php
23:58:00 working thread: cycle_webvars.php
23:58:01 working thread: cycle_execs.php
23:58:01 working thread: cycle_states.php
23:58:01 working thread: cycle_rss.php
23:58:01 working thread: cycle_websockets.php
23:58:01 working thread: cycle_scheduler.php
23:58:01 working thread: cycle_ping.php
23:58:01 working thread: cycle_main.php
23:58:01 working thread: cycle_webvars.php
23:58:02 working thread: cycle_execs.php
23:58:02 working thread: cycle_states.php
23:58:02 working thread: cycle_rss.php
23:58:02 working thread: cycle_websockets.php
23:58:02 working thread: cycle_scheduler.php
23:58:02 working thread: cycle_ping.php
23:58:02 working thread: cycle_main.php
23:58:02 working thread: cycle_webvars.php
переустановил MJD отсюда - http://majordomo.smartliving.ru/downloa ... 00b.tar.gz
все стартует нормально
как только обновляюсь, в лог прут кучу строк о запуске циклов, буквально за 2-3 минуты лог толстеет на 1-2мб из за этого

Re: Управление циклами (сервисами)

Добавлено: Вт ноя 08, 2016 10:44 am
GreatBAO
ответ нашел сам - в файле lib/threads.php
закоментировать строку 183 //echo date('H:i:s') . " working thread: " . $name . "\n";
не совсем понятен этот вывод в лог

Re: Управление циклами (сервисами)

Добавлено: Чт апр 06, 2017 10:38 am
ILGAS
Всем привет, подскажите как найти причину не возможности перезапуска цикла, majordomo пытает cycle_websockets сделать restart, но надпись так и висит, и не перезапускается. скрин тут https://yadi.sk/i/lihbOMbp3Ghrqn
похожая проблема бывает с cycle_schedapp, цикл работает но majordomo пытается перезапустить цикл, в Debug каждую секунду пишет

Код: Выделить всё

17:31:40 0.58912700 Error registered (type: cycle_stop): ./scripts/cycle_schedapp.php
17:31:40 0.58764200 AUTO-RECOVERY: ./scripts/cycle_schedapp.php
17:31:39 0.56763000 Closing thread: c:/_majordomo/server/php/php.exe -q ./scripts/cycle_schedapp.php --params "a:0:{}">>C:\_majordomo\htdocs/debmes/log_2017-03-01-cycle_schedapp.php.txt
об этом писал viewtopic.php?f=5&t=3411&start=20#p47149

Re: Управление циклами (сервисами)

Добавлено: Пн фев 05, 2018 11:41 pm
slgeo
Так и нет ответа? Никакой реакции на нажатия кнопок Start, Restart, только надпись висит. Что делать со службами, если они светятся синим шрифтом? Как вывести в поле Live значение для своего цикла, оно пустое?

Re: Управление циклами (сервисами)

Добавлено: Вт фев 06, 2018 6:10 am
nick7zmail
ILGAS писал(а):Всем привет, подскажите как найти причину не возможности перезапуска цикла, majordomo пытает cycle_websockets сделать restart
Может у вас сокеты отключены в config.php? Если они отключены, цикл скорее всего не должен быть запущен.

Re: Управление циклами (сервисами)

Добавлено: Вт фев 06, 2018 8:23 am
ipz
slgeo писал(а):Что делать со службами, если они светятся синим шрифтом? Как вывести в поле Live значение для своего цикла, оно пустое?
Синим цветом светятся те службы, которые не запущены. Делать с ними что-нибудь можно, если они вам нужны.
Что делать, чтобы выводилось значение в поле Live написано в UPD2 здесь https://majordomo.smartliving.ru/forum/ ... =40#p70319

Re: Управление циклами (сервисами)

Добавлено: Вт фев 06, 2018 8:41 am
slgeo
c Live понял, спасибо.
А вот синим помечены у меня упавшие циклы.
sudo service majordomo start перестал запускать циклы. Хотя sudo service majordomo stop успешно отрабатывает. Спасает только перезагрузка.

Re: Управление циклами (сервисами)

Добавлено: Пн авг 31, 2020 9:14 pm
Divan
Измененный код для метода checkState объекта System с автоперезапуском цикла. Видео смотреть здесь. Рекомендую, сначала проверять на тестовой машине, а после переносить на боевую.

Код: Выделить всё

$details=array();
$red_state=0;
$yellow_state=0;

$cycles=array('states'=>'цикл обновления статусов состояния системы','main'=>'главный цикл','execs'=>'цикл запуска команд','scheduler'=>'цикл планировщика');
foreach($cycles as $k=>$v) {
 $tm = getGlobal('ThisComputer.cycle_'.$k.'Run');
 if (time()-$tm>2*60 && !empty($tm)) {
  $red_state = 1;
  $details[] = $v." ".LANG_GENERAL_STOPPED.".";
  setGlobal('ThisComputer.cycle_'.$k.'Run','');
  setGlobal('ThisComputer.cycle_'.$k.'Control','restart');
 }
}

$cycles=array('ping'=>'цикл опроса устройств online','webvars'=>'цикл, обеспечивающий обновление веб-переменных');
foreach($cycles as $k=>$v) {
 $tm=getGlobal('ThisComputer.cycle_'.$k.'Run');
 if (time()-$tm>3*60 && !empty($tm)) {
  $yellow_state=1;
  $details[]=$v." ".LANG_GENERAL_CYCLE." ".LANG_GENERAL_STOPPED.".";
  setGlobal('ThisComputer.cycle_'.$k.'Run','');
  setGlobal('ThisComputer.cycle_'.$k.'Control','restart');
 }
}

if ($red_state) {
 $state='red';
 $state_title=LANG_GENERAL_RED; 
} elseif ($yellow_state) {
 $state='yellow';
 $state_title=LANG_GENERAL_YELLOW;  
} else {
 $state='green';
 $state_title=LANG_GENERAL_GREEN;   
}

$new_details=implode(". ",$details);
if ($this->getProperty("stateDetails")!=$new_details) {
 $this->setProperty('stateDetails',$new_details);
}

if ($this->getProperty('stateColor')!=$state) {
 $this->setProperty('stateColor',$state);
 $this->setProperty('stateTitle',$state_title);
 if ($state!='green') {
  say(LANG_GENERAL_SYSTEM_STATE." ".LANG_GENERAL_CHANGED_TO." ".$state_title.".");
  say(implode(". ",$details));
 } else {
  say(LANG_GENERAL_SYSTEM_STATE." ".LANG_GENERAL_RESTORED_TO." ".$state_title);
 }
 $this->callMethod('stateChanged');
}
/* begin injection of {SDevices} */
require(DIR_MODULES.'devices/system_checkstate.php');
/* end injection of {SDevices} */