oiv_1968 Posted January 26, 2016 Share Posted January 26, 2016 Как запустить скрипт при включении питания в IA240LX(Устройство) от имени имеющегося ВЕБ сервера. Устройство не имеет выход в другие сети и по ETHERNET подключено только к технологическому оборудованию. Необходимо иногда перезапускать или полностью останавливать ранее запущенный скрипт. У меня получается в автозапуске только с ROOT. И поэтому с веб-браузера на указанном оборудовании не удаётся СТАРТ/СТОП/РЕСТАРТ (соответственно и удаление файлов с PID запущенных процессов) Link to comment
oiv_1968 Posted January 27, 2016 Author Share Posted January 27, 2016 Отвечаю сам себе: Ничего глупее придумать не смог и найти тоже, но пока работает: (Испытание на UC-7112-plus) В /еtс/rc.d/rc.local добавил запуск "приежуточного" скрипта: /etc/init.d/moxa_fanuc & Сам скрипт производит локальное соединение по TELNET от имени WWW-DATA по умолчанию для APACHE: #!/bin/bash############################# AUTOSTART MOXA_FANUC_IMF ##############################sleep 3#echo "moxa fanuc"( sleep 1 echo "www-data" sleep 1 echo "www-data" sleep 1 echo " cd /home/httpd/ia240_fanuc1/fanuc" sleep 1 echo "ls" sleep 1 echo "./Fanuc restart &" sleep 30 ((i=10)) while((i > 0)) do sleep 1 done) | telnet 127.0.0.1 Где : ./Fanuc restart & - то что запускается/перезапускается как при включении питания, так и с ВЕБ интерфейса по PHP. Правда в процессе всей работы остаётся локальное соединение по TELNET Link to comment
boris_r_v Posted January 29, 2016 Share Posted January 29, 2016 Если я верно понял задачу, то есть приложение которое надо рестартить через вебку, а вебка это не может сделать т.к. процес автораном от рута запущен. Если все верно то: "boris@inspiron:/home$ su - elena -c /home/user" - запуск приложения /home/user от имени пользователя elena Проверка: boris@inspiron:~/Work/Science$ ps axu | grep /home/user root 19925 0.0 0.0 88732 2308 pts/28 S+ 09:40 0:00 su - elena -c /home/user elena 19933 0.0 0.0 12520 1056 ? Ss 09:40 0:00 /home/user - профит boris 19967 0.0 0.0 17184 944 pts/13 S+ 09:42 0:00 grep --color=auto /home/user boris@inspiron:~/Work/Science$ Кстати вопрос про вебку - бэкенд на чем написан cgi-скрипты? Link to comment
boris_r_v Posted January 29, 2016 Share Posted January 29, 2016 нда написал - потом увидел: да запускаемый файл называется user и да лежит он в /home и да не удачный пример. Link to comment
oiv_1968 Posted February 1, 2016 Author Share Posted February 1, 2016 Если я верно понял задачу, то есть приложение которое надо рестартить через вебку, а вебка это не может сделать т.к. процес автораном от рута запущен. Если все верно то: "boris@inspiron:/home$ su - elena -c /home/user" - запуск приложения /home/user от имени пользователя elena Проверка: boris@inspiron:~/Work/Science$ ps axu | grep /home/user root 19925 0.0 0.0 88732 2308 pts/28 S+ 09:40 0:00 su - elena -c /home/user elena 19933 0.0 0.0 12520 1056 ? Ss 09:40 0:00 /home/user - профит boris 19967 0.0 0.0 17184 944 pts/13 S+ 09:42 0:00 grep --color=auto /home/user boris@inspiron:~/Work/Science$ Кстати вопрос про вебку - бэкенд на чем написан cgi-скрипты? Да именно так! Включают оборудование на STEP 7 а IA-240 по Modbus RTU используя порты ввода-вывода от OWEN опрашивает опятьже STEP передаёт параметры роботу FANUC по Modbus RTU опятьже через порты. Ну не смог я подключить напрямую. Кроме того IA-240 обслуживает свой техпроцесс. Но бывают случаи, когда требуется произвести остановку ряда процессов, либо изменить. А через ВЕБ интерфейс очень удобно используя вебовский файл-менеджер на PHP производить загрузку и редактирование. И не ребуется SSH соединение.Пока, что пример в начале работает. Link to comment
oiv_1968 Posted February 1, 2016 Author Share Posted February 1, 2016 нда написал - потом увидел: да запускаемый файл называется user и да лежит он в /home и да не удачный пример. Спасибо попробую, но могу только на работе UC-7112LX-plus, на котором всё пробую - оставил на работе. Link to comment
boris_r_v Posted February 2, 2016 Share Posted February 2, 2016 Не за что, осмелюсь попросить ответную услугу - кинь бек-енд веб-сервера на мыло(boris_r_v @ mai l.ru), при условии, что это возможно. Давно хотел веб морду прикрутить к контроллеру, да не умею я сильно вебку на php-кодить с нуля. Link to comment
oiv_1968 Posted February 3, 2016 Author Share Posted February 3, 2016 Конечно возможноно - прикреплю, но не ругайте за код - его допиливать надо. Выложу, но по приходу домой - до конца смены 10 минут (не успею). Через пару часов смогу. Link to comment
oiv_1968 Posted February 3, 2016 Author Share Posted February 3, 2016 Не за что, осмелюсь попросить ответную услугу - кинь бек-енд веб-сервера на мыло(boris_r_v @ mai l.ru), при условии, что это возможно. Давно хотел веб морду прикрутить к контроллеру, да не умею я сильно вебку на php-кодить с нуля. Собственно в PHP я не очень, но кое-что. Запуск/Перезапуск у меня производится вызовом из PHP команды (BASH) (Веб-клиент на Fanuc ничего не умеет, даже кнопки, флаги, и селекты отображает как строку. Но может картинки и таблицы, а так же ссылки). По ссылке на странице вызываю PHP (в данном случае RESTART) ФРАГМЕНТ - ОДИН ИЗ ВЫЗОВОВ В HTML: (не ругайте я тут очень не очень - делал с помощью "KompoZer") <tr> <td rowspan="1" colspan="1" style="vertical-align: top; width: 633px; height: 35px;"><span style="font-weight: bold;"><a href="fanuc/start.php"> <img style="border: 0px solid ; width: 616px; height: 30px;" alt="" src="img/sm1.png"></a> <a href="fanuc/start.php"><br> </a></span></td> </tr> ВЫЗЫВАЕМЫЙ PHP: <?php $command = "./Fanuc restart &"; exec($command); echo "Press Key \"BACK\""; ?> строка : echo "Press Key \"BACK\""; нужна потому, что указанный веб-клиент и вернуться не позволяет в отличии от нормального браузера - вот и приходиться выводить это сообщение, да и кирилицы никакой он не умеет. Меню на русском делал с помощью картинок. А так получал в параметры в PHP из BASH (shell_exec(****) - выполнение оболочки shell of linux с выводом в PHP): <?php //......... $nfile="/home/httpd/ramdisk/WrInMask"; $DI117=shell_exec("cat ".$nfile." | grep 'DI117' | awk '/DI117/ {print($3)}'"); $DI118=shell_exec("cat ".$nfile." | grep 'DI118' | awk '/DI118/ {print($3)}'"); $DI119=shell_exec("cat ".$nfile." | grep 'DI119' | awk '/DI119/ {print($3)}'"); $DI120=shell_exec("cat ".$nfile." | grep 'DI120' | awk '/DI120/ {print($3)}'"); $InMask=shell_exec("cat ".$nfile." | grep 'InMask' | awk '/InMask/ {print($3)}'"); $OutMask=shell_exec("cat ".$nfile." | grep 'OutMask' | awk '/OutMask/ {print($3)}'"); //......... //Далее формируется страница // ?> Собственно "Fanuc" - скрипт на BASH запускает бинарные файлы написанные на C. Для наглядности априлагаю некоторые: start.php stop.php Fanuc.zip pump_paint.php Саму страницу послать сложно, там ссылки на картинки и их придётся со страницей - проще всю директорию сжать. Но если без этого никак - сделаю! Link to comment
boris_r_v Posted February 5, 2016 Share Posted February 5, 2016 Да нет наверное не нужно, был интересен пример реализации, я поразбираюсь если будут вопросы напишу. Link to comment
oiv_1968 Posted February 5, 2016 Author Share Posted February 5, 2016 Да нет наверное не нужно, был интересен пример реализации, я поразбираюсь если будут вопросы напишу. Простите! Совсем забыл ФАЙЛОВЫЙ МЕНЕДЖЕР. webadmin.php За название простите - это название я для себя делал, хотя код не мой! Поместите его на MOXA в рабочую директорию (где ваша страничка) WEB сервера и обращайтесь к нему из браузера Link to comment
boris_r_v Posted February 5, 2016 Share Posted February 5, 2016 окай - мерси Кстати с запуском то не от рута - получилось? Link to comment
oiv_1968 Posted February 5, 2016 Author Share Posted February 5, 2016 окай - мерси Кстати с запуском то не от рута - получилось? Пробую в командной строке от ROOT: su - www-data -c /home/httpd/serial/test Производиться вход: #### #### ###### ####### ###### ## ### #### ### ### #### #### ### ### ### ### ### ### ## ### ### #### ## ## ### # #### #### # ## ### ### ### ## ## ## ## ## # ## ### ## #### # ## ## ### ## ## ## ## #### # ### ## ## # ## ## ## ### ####### ## ## # ## ### ### ##### # ## ## ### ## ### ### ## ### # ### ## ### ## ## ## ## ### ## ## ## ### ## ## ## # ### # ## ###### # ###### ######## ####### ########### ###### For further information check: http://www.moxa.com/ www-data@Moxa:~$ Далее проверяю вроде нормально: www-data@Moxa:~$ ps axu | grep /home/httpd/serial/test 22401 www-data 2228 S grep /home/httpd/serial/test Просто PS - не видно: www-data@Moxa:~$ ps PID USER VSZ STAT COMMAND 1 root 1248 S init [3] 2 root 0 SWN [ksoftirqd/0] 3 root 0 SW< [events/0] 4 root 0 SW< [khelper] 5 root 0 SW< [kblockd/0] 6 root 0 SW [pdflush] 7 root 0 SW [pdflush] 9 root 0 SW< [aio/0] 8 root 0 SW [kswapd0] 12 root 0 SW< [kmmcd] 10 root 0 SW [mxcrypto_dispat] 11 root 0 SW [mtdblockd] 13 root 0 SW< [mmcqd] 24 root 0 SWN [jffs2_gcd_mtd3] 73 root 1252 S dhcpcd eth1:2 77 root 1284 S /bin/inetd 85 bin 1220 S /bin/portmap 99 root 2008 S /bin/bash /etc/init.d/sharedev 147 root 15380 S /usr/bin/httpd -k start -d /etc/apache 149 root 2084 S /bin/sh --login 161 root 1280 S /bin/snmpd 165 root 1200 S /bin/reportip 216 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 217 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 218 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 219 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 220 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 21213 root 6676 S /bin/sshd -i 21243 www-data 6616 S /bin/sshd -i 21244 www-data 2468 S -sh 21345 root 2092 S -bash 22231 www-data 2468 S -sh 22415 root 2220 S sleep 3 22416 www-data 2300 R ps Вхожу в другой сеанс SSH и проверяю: www-data@Moxa:~$ ps axu | grep /home/httpd/serial/test 24086 www-data 2228 S grep /home/httpd/serial/test Сразу: для первого сеанса, когда запускали из под ROOT: 22401 www-data 2228 S grep /home/httpd/serial/test для втого сеанса, когда сделали второе соединение по SSH для пользователя www-data: 24086 www-data 2228 S grep /home/httpd/serial/test PID не совпадает! В другом сенансе просто PS: www-data@Moxa:~$ ps PID USER VSZ STAT COMMAND 1 root 1248 S init [3] 2 root 0 SWN [ksoftirqd/0] 3 root 0 SW< [events/0] 4 root 0 SW< [khelper] 5 root 0 SW< [kblockd/0] 6 root 0 SW [pdflush] 7 root 0 SW [pdflush] 9 root 0 SW< [aio/0] 8 root 0 SW [kswapd0] 12 root 0 SW< [kmmcd] 10 root 0 SW [mxcrypto_dispat] 11 root 0 SW [mtdblockd] 13 root 0 SW< [mmcqd] 24 root 0 SWN [jffs2_gcd_mtd3] 73 root 1252 S dhcpcd eth1:2 77 root 1284 S /bin/inetd 85 bin 1220 S /bin/portmap 99 root 2008 S /bin/bash /etc/init.d/sharedev 147 root 15380 S /usr/bin/httpd -k start -d /etc/apache 149 root 2084 S /bin/sh --login 161 root 1280 S /bin/snmpd 165 root 1200 S /bin/reportip 216 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 217 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 218 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 219 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 220 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 21213 root 6676 S /bin/sshd -i 21243 www-data 6616 S /bin/sshd -i 21244 www-data 2468 S -sh 21345 root 2092 S -bash 23151 root 6676 S /bin/sshd -i 23161 www-data 6528 S /bin/sshd -i 23162 www-data 2468 S -sh 23807 www-data 2088 S -sh 23831 root 2220 S sleep 3 23832 www-data 2300 R ps удаляю в другом сеансе: www-data@Moxa:~$ kill 24086 sh: kill: (24086) - No such pid и проверяю: www-data@Moxa:~$ ps axu | grep /home/httpd/serial/test 24739 www-data 2228 S grep /home/httpd/serial/test НЕ УБИЛ И ВИЖУ ДРУГОЙ PID! В первом сеансе: www-data@Moxa:~$ kill 23817 sh: kill: (23817) - No such pid и проверяю: 1 раз: www-data@Moxa:~$ ps axu | grep /home/httpd/serial/test www-data@Moxa:~$ ps axu | grep /home/httpd/serial/test вроде убил! 2 раз: www-data@Moxa:~$ ps axu | grep /home/httpd/serial/test 25342 www-data 2228 S grep /home/httpd/serial/test НЕ УБИЛ! выхожу обратно в ROOT: ps axu | grep /home/httpd/serial/test всё на месте и если посмотреть на все PID - они все разные! Впрочем при нормальном запуске для одного прог. модуля три потока! Обычно я делаю многопоточные модули на Си, а в моём случае собственный сервер Modbus RTU - 1 поток Main, который окрывает последовательный порт и стартует поток работы с ним, а также иоткрывает сокет и стартует поток его прослушивания, который в свою очередь будет отрывать поток для каждого соединения. Когда есть подключение видно: 27758 www-data 7880 S ./modbusRTUserverS -sp 0 -br 2400 -db 8 -sb 1 -p 8971 27763 www-data 7880 S ./modbusRTUserverS -sp 0 -br 2400 -db 8 -sb 1 -p 8971 27765 www-data 7880 S ./modbusRTUserverS -sp 0 -br 2400 -db 8 -sb 1 -p 8971 27766 www-data 7880 S ./modbusRTUserverS -sp 0 -br 2400 -db 8 -sb 1 -p 8971 27767 www-data 1340 S ./Ia240_TypesStep -ip 127.0.0.1 -p 8971 -cip 8990 -rt 27768 www-data 7880 S ./modbusRTUserverS -sp 0 -br 2400 -db 8 -sb 1 -p 8971 Всё по моему усложняется (может я чего не понял), и пока нет возможности кропотливо всё испытывать =( Пока оставляю TELNET соединение. Уже почти неделю всё крутится. И ещё, ну это не по теме : МОЖЕТ ПОДЕЛИТЕСЬ GCC, КОТОРЫЙ РАБОТАЕТ НА MOXA ДЛЯ MOXA, А НЕ ТОТ, ЧТО ИДЁТ НА ДИСКЕ - РАБОТАЕТ НА PC ДЛЯ MOXA. Я миею ввиду arm-linux-gcc, котрый работает на самих IA240(1)LX и UC-7112-plus. Link to comment
boris_r_v Posted February 8, 2016 Share Posted February 8, 2016 Пару моментов 1. При закрытии терминала(сессии) все процессы у которых специально не обрабатывается сигнал SIGINT(вроде) умирают. 2. Проверил на w325 - у меня вообще не получилось сделать запуск описанным ранее способом. Походу реализации su разные. 3. gcc - это компилятор, для компиляции программ нужен набор системных библиотек и <b>заголовоных файлов</b>, как раз и из-за последних на контроллере ничего собрать не получиться - там их нет, д аи жутко медленно будет. Поэтому и была придумана кросс-компиляция. - это когда ты на х86 собираешь программки для arm. А теперь ответ: gcc для moхa UC-7112+ - странная штука, скорее всего не существующая в природе. если надо что то собрать то поищи программинг гайд и пользуй тоолчайн с диска. Например тут: http://www.moxa.com/support/support_home.aspx?isSearchShow=1 Link to comment
oiv_1968 Posted February 8, 2016 Author Share Posted February 8, 2016 Пару моментов 1. При закрытии терминала(сессии) все процессы у которых специально не обрабатывается сигнал SIGINT(вроде) умирают. 2. Проверил на w325 - у меня вообще не получилось сделать запуск описанным ранее способом. Походу реализации su разные. 3. gcc - это компилятор, для компиляции программ нужен набор системных библиотек и <b>заголовоных файлов</b>, как раз и из-за последних на контроллере ничего собрать не получиться - там их нет, д аи жутко медленно будет. Поэтому и была придумана кросс-компиляция. - это когда ты на х86 собираешь программки для arm. А теперь ответ: gcc для moхa UC-7112+ - странная штука, скорее всего не существующая в природе. если надо что то собрать то поищи программинг гайд и пользуй тоолчайн с диска. Например тут: http://www.moxa.com/support/support_home.aspx?isSearchShow=1 Да! Жаль! Буду кросс-компиляцию применять как и в самом начале! По поводу сессий - должно отваливаться и отваливается. Запуск, который производится через ВЕБ - продолжает работать. Сам сервер: 216 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 217 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 218 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 219 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache 220 www-data 15404 S /usr/bin/httpd -k start -d /etc/apache в работе, т.е. сессия от него продолжается. Про TELNET - он "висит" в цикле единыжды запустив скрипт от имени пользователя www-data которым и является apache. Спасибо огромное вопрос снят. Сотрудники приходят в начале смены, подают напряжение - всё стартует. При необходимости перезапускают - обычно это я сам (значит изменение в коде). /Подключаю RaspberryPI с WIFI к IA240 - ко второму порту ETHERNET, сливаю что надо с мобильника (ранее откомпилированное) произвожу рестарт/ Спасибо!!! Link to comment
oiv_1968 Posted January 22, 2018 Author Share Posted January 22, 2018 Если я верно понял задачу, то есть приложение которое надо рестартить через вебку, а вебка это не может сделать т.к. процес автораном от рута запущен. Если все верно то: "boris@inspiron:/home$ su - elena -c /home/user" - запуск приложения /home/user от имени пользователя elena Проверка: boris@inspiron:~/Work/Science$ ps axu | grep /home/user root 19925 0.0 0.0 88732 2308 pts/28 S+ 09:40 0:00 su - elena -c /home/user elena 19933 0.0 0.0 12520 1056 ? Ss 09:40 0:00 /home/user - профит boris 19967 0.0 0.0 17184 944 pts/13 S+ 09:42 0:00 grep --color=auto /home/user boris@inspiron:~/Work/Science$ Кстати вопрос про вебку - бэкенд на чем написан cgi-скрипты? ...отвечаю, через огромный срок. Но вот потребовалось сделать то же самое, только на Raspberry Pi 3. TELNET ставить не стал, а как Вы показали так: 1) в /etc/rc.local сделал так(добавил): su www-data -c /home/httpd/bash/wwstart & 2) сам скрипт в директории /home/httpd/bash/wwstart: #!/bin/bash # #рабочая директория _workdir="/home/httpd/ramdisk" #директория скриптов bash _bashdir="/home/httpd/bash" # _pid=$(ps aux | pgrep lwork.sh) echo "p:$_pid" #проверка, копирование, переход и запуск if [ "$_pid" == "" ]; then cp $_bashdir/lwork.sh $_workdir/lwork.sh cd $_workdir ./lwork.sh start & fi # exit 0 потому как работаем из RAMDISK, то и запуск оттуда. Теперь наш "процесс" можно перезапускать от имени www-data. Спасибо!!!!!!!!!!! Link to comment
oiv_1968 Posted February 19, 2018 Author Share Posted February 19, 2018 Вот только... при закрытии сессии SSH запущенный процесс "умирает". Скорее всего поможет если запускать самим сервером APACHE... через ВЕБ страницу. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now