Периодически запуск сценариев

Новые релизы, обновления и т.п.

Модератор: immortal

Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Периодически запуск сценариев

Сообщение Logrus » Вт июн 02, 2020 8:23 pm

анекдот вспомнился
- почему киты выбрасываются на берег?
- а им кто-то сказал, что они тоже млекопитающие...
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Периодически запуск сценариев

Сообщение skysilver » Ср июн 03, 2020 10:27 am

Bagir писал(а):
Вт июн 02, 2020 7:12 pm
Через БД, по сути это почти тоже самое что использовать штатную getGlobal()
По сути да, но gg() это лишние запросы и нагрузка.

Лучше использовать очередь сообщений - таблица operations_queue (с типом MEMORY, т.е. висит она в оперативке).

Добавить в очередь:

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

addToOperationsQueue('queue_name', 'dataname', 'datavalue');
Взять из очереди и очистить:

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

$operations=checkOperationsQueue('queue_name');
Насчет сокетов. Не нужно путать МДМ-шные вебсокеты (циклы cycle_websocket, cycle_wscache) с обычными сокетами - socket_create(), socket_listen(), stream_select() и т.д.
За это сообщение автора skysilver поблагодарили (всего 2):
Chainik (Ср июн 03, 2020 10:53 am) • Samir77 (Ср июн 03, 2020 3:16 pm)
Рейтинг: 2.33%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Ср июн 03, 2020 7:36 pm

skysilver писал(а):
Ср июн 03, 2020 10:27 am
Лучше использовать очередь сообщений - таблица operations_queue
Вот сколько уже лет с Алисой, но с таблицей operations_queue ещё не работал. Похоже это самое то, и даже без нагромождения своего кода. Спасибо за совет, сейчас думаю, куда бы ещё применить этот инструмент.
Сокеты действительно можно использовать напрямую для этой задачи. Я как то не подумал об этом, хоть только что использовал их для отправки сообщений в свою программу для музыки и чтения сообщений. Как то сокеты у меня больше с сетевыми запросами ассоциируются, но почему бы и нет.
Если сегодня доберусь, попробую с таблицей operations_queue. А там посмотрим.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Ср июн 03, 2020 7:45 pm

Не нашел никакой инфы по функции для очереди addToOperationsQueue. Полез разбираться в php коде.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Периодически запуск сценариев

Сообщение Logrus » Ср июн 03, 2020 8:41 pm

Bagir писал(а):
Ср июн 03, 2020 7:45 pm
Не нашел никакой инфы по функции для очереди addToOperationsQueue. Полез разбираться в php коде.
а ее никто, кроме пу не использует и при добавлении пять аргументов, последние два очень существенны (но не обязательны) ...
а так просто все
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Чт июн 04, 2020 12:55 pm

Вот такой вопрос: файл threads.php отвечает за запуск и остановку циклов. Код функции closeThread($id):

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

   public function closeThread($id) {
      $pstatus = proc_get_status($this->handles[$id]);
      $pid = $pstatus['pid'];
      $cmd = $pstatus['command'];
      DebMes("Closing thread $pid ($cmd)",'threads');
/* */      if (!proc_terminate($this->handles[$id])) {
/* */         DebMes("Cannot close process $pid ($cmd) with proc_terminate",'threads');
         if (IsWindowsOS()) {
            $exec_str="taskkill /F /T /PID $pid";
         } else {
            $exec_str="kill -9 $pid";
         }
         DebMes("Executing: ".$exec_str,'threads');
         $output = array();
         $result = exec($exec_str,$output);
         DebMes("Result: ".implode("\n",$output),'threads');
         
/* */      } else {
/* */         DebMes("Process $pid ($cmd) closed with proc_terminate",'threads');
/* */      }
         
   }
Кто в курсе, почему для закрытия процесса отказались от функции proc_terminate? У меня под виндой вроде хорошо работает. А вот taskkill просит библиотеку, которую я ни как не могу прикрутить. Ругается на не найденную точку входа. С библой наверное можно разобраться, но мне интересно, почему ушли от proc_terminate. Вроде как правильней закрывать процесс ею, если он был открыт через proc_open.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Периодически запуск сценариев

Сообщение xor » Чт июн 04, 2020 7:04 pm

Bagir писал(а):
Чт июн 04, 2020 12:55 pm
Вот такой вопрос: файл threads.php отвечает за запуск и остановку циклов. Код функции closeThread($id):

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

   public function closeThread($id) {
      $pstatus = proc_get_status($this->handles[$id]);
      $pid = $pstatus['pid'];
      $cmd = $pstatus['command'];
      DebMes("Closing thread $pid ($cmd)",'threads');
/* */      if (!proc_terminate($this->handles[$id])) {
/* */         DebMes("Cannot close process $pid ($cmd) with proc_terminate",'threads');
         if (IsWindowsOS()) {
            $exec_str="taskkill /F /T /PID $pid";
         } else {
            $exec_str="kill -9 $pid";
         }
         DebMes("Executing: ".$exec_str,'threads');
         $output = array();
         $result = exec($exec_str,$output);
         DebMes("Result: ".implode("\n",$output),'threads');
         
/* */      } else {
/* */         DebMes("Process $pid ($cmd) closed with proc_terminate",'threads');
/* */      }
         
   }
Кто в курсе, почему для закрытия процесса отказались от функции proc_terminate? У меня под виндой вроде хорошо работает. А вот taskkill просит библиотеку, которую я ни как не могу прикрутить. Ругается на не найденную точку входа. С библой наверное можно разобраться, но мне интересно, почему ушли от proc_terminate. Вроде как правильней закрывать процесс ею, если он был открыт через proc_open.
странно, что у вас тасккилл ругается, она же идет как команда ос, начиная с хр. Может, у вас что-то с дистрибутивом?
ps TSKILL ещё есть для многопользовательских систем
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Чт июн 04, 2020 8:17 pm

xor писал(а):
Чт июн 04, 2020 7:04 pm
она же идет как команда ос, начиная с хр. Может, у вас что-то с дистрибутивом?
Похоже на то. Или какая-нибудь зараза приволокла и прописала другую версию этой библы. Вечерком попробую восстановить стандартные библиотеки.
Мне больше покою не дает вопрос, почему отказались от функции proc_terminate. Сегодня буду пробовать с ней играться.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Чт июн 04, 2020 8:50 pm

Вот только ещё один момент, на моем пути к теме топика. Ранее не написал, думал что грабли лежат на траве, а нет, спрятаны. Когда я жму кнопку Stop в xray -> Services, циклы успешно останавливаются, но затем сразу стартуют по новой. Похоже куда то переехали правила авторекавери.

Что то я дольше даже не наблюдаю участие массива $restart_threads из config.php в cycle.php, да и вообще где либо. Я круто отстал от жизни МД...
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Периодически запуск сценариев

Сообщение Logrus » Чт июн 04, 2020 9:24 pm

Bagir писал(а):
Чт июн 04, 2020 8:50 pm
Вот только ещё один момент, на моем пути к теме топика. Ранее не написал, думал что грабли лежат на траве, а нет, спрятаны. Когда я жму кнопку Stop в xray -> Services, циклы успешно останавливаются, но затем сразу стартуют по новой. Похоже куда то переехали правила авторекавери.

Что то я дольше даже не наблюдаю участие массива $restart_threads из config.php в cycle.php, да и вообще где либо. Я круто отстал от жизни МД...
массив выкинь его и в цикл пхп выкинуть
а по стоп все работает

в тлг многое уже обсуждено, это ночью прошлой ковырял
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить