Jump to content
Форум по продукции MOXA

Автозапуск от пользователя в IA240


Recommended Posts

Как запустить скрипт при включении питания в IA240LX(Устройство) от имени имеющегося ВЕБ сервера. Устройство не имеет выход в другие сети и по ETHERNET подключено только к технологическому оборудованию. Необходимо иногда перезапускать или полностью останавливать ранее запущенный скрипт. У меня получается в автозапуске только с ROOT. И поэтому с веб-браузера на указанном оборудовании не удаётся СТАРТ/СТОП/РЕСТАРТ (соответственно и удаление файлов с PID  запущенных процессов)

 

Link to post

Отвечаю сам себе:

Ничего глупее придумать не смог и найти тоже, но пока работает:

(Испытание на 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 post

Если я верно понял задачу, то есть приложение которое надо рестартить через вебку, а вебка это не может сделать т.к. процес автораном от рута запущен. Если все верно то:

 

"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 post

нда написал - потом увидел:

да запускаемый файл называется user и да лежит он в /home и да не удачный пример.

 

 

Link to post

 

Если я верно понял задачу, то есть приложение которое надо рестартить через вебку, а вебка это не может сделать т.к. процес автораном от рута запущен. Если все верно то:

 

"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 post

нда написал - потом увидел:

да запускаемый файл называется user и да лежит он в /home и да не удачный пример.

 

Спасибо попробую, но могу только на работе UC-7112LX-plus, на котором всё пробую - оставил на работе.

Link to post

Не за что, осмелюсь попросить ответную услугу - кинь бек-енд веб-сервера на мыло(boris_r_v @ mai l.ru), при условии, что это возможно.

Давно хотел веб морду прикрутить к контроллеру, да не умею я сильно вебку на php-кодить с нуля.

 

Link to post

Конечно возможноно - прикреплю, но не ругайте за код - его допиливать надо. Выложу, но по приходу домой - до конца смены 10 минут (не успею). Через пару часов смогу.

Link to post

Не за что, осмелюсь попросить ответную услугу - кинь бек-енд веб-сервера на мыло(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 post

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

Link to post

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

 

Простите! Совсем забыл ФАЙЛОВЫЙ МЕНЕДЖЕР.

 

webadmin.php

 

За название простите - это название я для себя делал, хотя код не мой!

Поместите его на MOXA в рабочую директорию (где ваша страничка)  WEB сервера и обращайтесь к нему из браузера

Link to post

окай - мерси

Кстати с запуском то не от рута - получилось?

 

Link to post

окай - мерси

Кстати с запуском то не от рута - получилось?

 

Пробую в командной строке от 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 post

Пару моментов

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 post

Пару моментов

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 post
  • 1 year later...

 

Если я верно понял задачу, то есть приложение которое надо рестартить через вебку, а вебка это не может сделать т.к. процес автораном от рута запущен. Если все верно то:

 

"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 post
  • 4 weeks later...

Вот только... при закрытии сессии SSH запущенный процесс "умирает". Скорее всего поможет если запускать самим сервером APACHE... через ВЕБ страницу.

Link to post

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...