Как в MD запустить PHP и остановить его

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Smirnoff1976
Сообщения: 130
Зарегистрирован: Пт май 26, 2017 11:51 am
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Как в MD запустить PHP и остановить его

Сообщение Smirnoff1976 » Ср дек 20, 2017 8:39 pm

Есть программа на пхп зацикленная, надо чтобы она запускалась при включении переключателя на сцене, а при выключении из нее выходила. Система линукс. Есть идеи?
zoz
Сообщения: 74
Зарегистрирован: Чт авг 11, 2016 1:19 am
Откуда: Киев
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: Как в MD запустить PHP и остановить его

Сообщение zoz » Ср дек 20, 2017 10:51 pm

Есть!
например, сделать "программу" незацыкленой в одну итерацию, в начало добавить проверку "включен или выключен". назвать сценарий "Prog"
в конец добавить запуск таймера который вызовет еще раз Prog
setTimeOut("Prog_timer", "runScript('Prog');", 10);
этот на 10 сек (то есть каждые 10 сек будет запускаться ваша прога если выключатель нажат)
Домик Алисы - Orange Pi PC, DietPi | +BroadlinkRM+esp8266(espEasy)+zigbee(sonoff,Aqara)
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1754 раза
Контактная информация:

Re: Как в MD запустить PHP и остановить его

Сообщение skysilver » Ср дек 20, 2017 11:04 pm

Smirnoff1976 писал(а):Есть программа на пхп зацикленная, надо чтобы она запускалась при включении переключателя на сцене, а при выключении из нее выходила. Система линукс. Есть идеи?
Сделать бесконечный цикл в этой программе управляемым. Например, как в циклах МДМ:

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

while (1) {
   
    if (file_exists('./reboot') || IsSet($_GET['onetime'])) {
        exit;
    }

}
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
savenko_egor
Сообщения: 705
Зарегистрирован: Вс авг 03, 2014 8:17 pm
Откуда: Украина, Запорожье
Благодарил (а): 108 раз
Поблагодарили: 147 раз
Контактная информация:

Re: Как в MD запустить PHP и остановить его

Сообщение savenko_egor » Ср дек 20, 2017 11:05 pm

Ну или можно закостылить на основе exec. Вызывать shell команду для запуска Вашего скрипта, и так же само вызывать команду на "убийство"(kill) скрипта.
Smirnoff1976
Сообщения: 130
Зарегистрирован: Пт май 26, 2017 11:51 am
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Как в MD запустить PHP и остановить его

Сообщение Smirnoff1976 » Ср дек 20, 2017 11:30 pm

warik писал(а):Ну или можно закостылить на основе exec. Вызывать shell команду для запуска Вашего скрипта, и так же само вызывать команду на "убийство"(kill) скрипта.
А поподробнее?
Smirnoff1976
Сообщения: 130
Зарегистрирован: Пт май 26, 2017 11:51 am
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Как в MD запустить PHP и остановить его

Сообщение Smirnoff1976 » Ср дек 20, 2017 11:32 pm

skysilver писал(а):
Smirnoff1976 писал(а):Есть программа на пхп зацикленная, надо чтобы она запускалась при включении переключателя на сцене, а при выключении из нее выходила. Система линукс. Есть идеи?
Сделать бесконечный цикл в этой программе управляемым. Например, как в циклах МДМ:

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

while (1) {
   
    if (file_exists('./reboot') || IsSet($_GET['onetime'])) {
        exit;
    }

} 
И при включении создавать фаил в папке? А при выключении прибивать его?
Аватара пользователя
savenko_egor
Сообщения: 705
Зарегистрирован: Вс авг 03, 2014 8:17 pm
Откуда: Украина, Запорожье
Благодарил (а): 108 раз
Поблагодарили: 147 раз
Контактная информация:

Re: Как в MD запустить PHP и остановить его

Сообщение savenko_egor » Чт дек 21, 2017 12:03 am

Smirnoff1976 писал(а):
warik писал(а):Ну или можно закостылить на основе exec. Вызывать shell команду для запуска Вашего скрипта, и так же само вызывать команду на "убийство"(kill) скрипта.
А поподробнее?
Имеем свой скрипт по пути: /var/www/script.php
Добавляем элемент "switch" на сцену:
СпойлерПоказать
Screenshot_20171220_224331.png
Screenshot_20171220_224331.png (38.39 КБ) 4985 просмотров
Добавляем класс, объект, свойства и методы объекта. Я для примера взял готовый класс "Relays" который был в системе по дефолту. В него я добавил новый объект "Relay1":
СпойлерПоказать
Screenshot_20171220_224555.png
Screenshot_20171220_224555.png (56.88 КБ) 4985 просмотров
Этот объект привязал к переключателю что был добавлен выше. Это видно на первом скрине.
Далее у этого объекта есть методы, которые изменяются при нажатии на переключатель на сцене. Методы, так же как и весь класс, уже были добавлены в систему по дефолту. В этих методах добавляем код:
Для запуска скрипта:
СпойлерПоказать
Screenshot_20171220_225839.png
Screenshot_20171220_225839.png (48.37 КБ) 4985 просмотров

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

exec("/usr/bin/php /var/www/script.php");
И для остановки:
СпойлерПоказать
Screenshot_20171220_225947.png
Screenshot_20171220_225947.png (49.65 КБ) 4985 просмотров

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

exec("pgrep -f '/usr/bin/php /var/www/script.php'");
В pgrep возможно понадобится использовать sudo.

Это примерное описание реализации которое будет работать. Я написал этот пример для того чтобы просто показать Вам вариант решения Вашего вопроса. Понятное дело что под такое нужно будет создавать свой класс, свойства и методы, потому что класс который я использовал для примера, может использоваться в будущем или уже используется Вами в системе.
За это сообщение автора savenko_egor поблагодарил:
Smirnoff1976 (Чт дек 21, 2017 12:07 pm)
Рейтинг: 1.16%
Smirnoff1976
Сообщения: 130
Зарегистрирован: Пт май 26, 2017 11:51 am
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Как в MD запустить PHP и остановить его

Сообщение Smirnoff1976 » Чт дек 21, 2017 12:06 pm

warik писал(а):
Smirnoff1976 писал(а):
warik писал(а):Ну или можно закостылить на основе exec. Вызывать shell команду для запуска Вашего скрипта, и так же само вызывать команду на "убийство"(kill) скрипта.
А поподробнее?
Имеем свой скрипт по пути: /var/www/script.php
Добавляем элемент "switch" на сцену:
СпойлерПоказать
Screenshot_20171220_224331.png
Добавляем класс, объект, свойства и методы объекта. Я для примера взял готовый класс "Relays" который был в системе по дефолту. В него я добавил новый объект "Relay1":
СпойлерПоказать
Screenshot_20171220_224555.png
Этот объект привязал к переключателю что был добавлен выше. Это видно на первом скрине.
Далее у этого объекта есть методы, которые изменяются при нажатии на переключатель на сцене. Методы, так же как и весь класс, уже были добавлены в систему по дефолту. В этих методах добавляем код:
Для запуска скрипта:
СпойлерПоказать
Screenshot_20171220_225839.png

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

exec("/usr/bin/php /var/www/script.php"); 
И для остановки:
СпойлерПоказать
Screenshot_20171220_225947.png

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

exec("pgrep -f '/usr/bin/php /var/www/script.php'"); 
В pgrep возможно понадобится использовать sudo.

Это примерное описание реализации которое будет работать. Я написал этот пример для того чтобы просто показать Вам вариант решения Вашего вопроса. Понятное дело что под такое нужно будет создавать свой класс, свойства и методы, потому что класс который я использовал для примера, может использоваться в будущем или уже используется Вами в системе.
О спасибо! На благодарить сейчас нажму!

только pgrep -f выдает номер процесса, а чтобы прибить надо pkill -f. В терминале пашет, сейчас попробую в МД реализовать.
Аватара пользователя
savenko_egor
Сообщения: 705
Зарегистрирован: Вс авг 03, 2014 8:17 pm
Откуда: Украина, Запорожье
Благодарил (а): 108 раз
Поблагодарили: 147 раз
Контактная информация:

Re: Как в MD запустить PHP и остановить его

Сообщение savenko_egor » Чт дек 21, 2017 12:28 pm

Smirnoff1976 писал(а): О спасибо! На благодарить сейчас нажму!
только pgrep -f выдает номер процесса, а чтобы прибить надо pkill -f. В терминале пашет, сейчас попробую в МД реализовать.
Да. С pgrep-ом перепутал.
Smirnoff1976
Сообщения: 130
Зарегистрирован: Пт май 26, 2017 11:51 am
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Как в MD запустить PHP и остановить его

Сообщение Smirnoff1976 » Пт дек 22, 2017 2:17 pm

Решено! Теперь гирлянда моргает, я готов к Новому Году! Всех с наступающем!
Ответить