Segnetics

Вернуться   Segnetics > Форум Segnetics > Вопросы о Trim5

Вопросы о Trim5 Работа и применение контроллеров с сенсорной панелью Trim5.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2018, 16:50   #1
maks
Senior Member
 
Регистрация: Dec 2012
Сообщения: 164
Благодарил(а): 5 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Как отследить работу своей программы

Сделал контроль работы программы на Си. Трим покажет предупреждение, если программа зависнет или "вылетит". А можно еще что-то сделать, например, перезагрузить программу из лоджика или перезагрузить весь трим?
maks вне форума   Ответить с цитированием
Старый 04.04.2018, 16:51   #2
Gromov
Уволен из Сегнетикс
 
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: VirtualBox Linux. Подключение к трим

Надо писать отдельного демона, который будет следить за программой и перезапускать.


__________________
В сегнетиксе не работаю с самого начала 2019 года.
Gromov вне форума   Ответить с цитированием
Старый 04.04.2018, 17:12   #3
maks
Senior Member
 
Регистрация: Dec 2012
Сообщения: 164
Благодарил(а): 5 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: VirtualBox Linux. Подключение к трим

Цитата
Сообщение от Gromov Посмотреть сообщение
Надо писать отдельного демона, который будет следить за программой и перезапускать.
Может есть что-то готовое, штатное?
maks вне форума   Ответить с цитированием
Старый 04.04.2018, 17:18   #4
Gromov
Уволен из Сегнетикс
 
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: VirtualBox Linux. Подключение к трим

Конечно есть, в гугле множество вариантов. Линус существует не первый день.

Штатный - только SMLogix. Все внедрения в работу программ и операционной системы - это всё на ваше усмотрение и под вашу ответственность.


__________________
В сегнетиксе не работаю с самого начала 2019 года.
Gromov вне форума   Ответить с цитированием
Старый 27.04.2018, 19:09   #5
maks
Senior Member
 
Регистрация: Dec 2012
Сообщения: 164
Благодарил(а): 5 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Как отследить работу своей программы

Добавил в конец start.after
while true; do ./my_scripts_reboot; sleep 10; done;
рядом лежит скрипт my_scripts_reboot, который выполняет проверку и перезапускает, если программа не работает.
Проверил на железе - все отрабатывает правильно.
Правильный алгоритм действий?
maks вне форума   Ответить с цитированием
Старый 27.04.2018, 19:25   #6
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 020
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Как отследить работу своей программы

Цитата
Сообщение от maks Посмотреть сообщение
Добавил в конец start.after
while true; do ./my_scripts_reboot; sleep 10; done;
рядом лежит скрипт my_scripts_reboot, который выполняет проверку и перезапускает, если программа не работает.
Проверил на железе - все отрабатывает правильно.
Правильный алгоритм действий?
start.after должен запустить другой скрипт, который будет вертеть вайл.

Это логически более правильно.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 28.04.2018, 11:02   #7
Gromov
Уволен из Сегнетикс
 
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Как отследить работу своей программы

Я когда-то делал на с++ такие вещи. Вот вам код, тут всё просто

Код:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <sys/time.h>
#include <ctime>
#include <locale.h>
#include <fstream>

#define timesec 10
#define timensec 1000 //loop задержка цикла

#define marx_num 3 // Количество программ

using namespace std;

#pragma GCC diagnostic ignored "-Wwrite-strings"

int main(int argc, char *argv[]){
    struct timespec tw = {timesec,timensec*100000};
    struct timespec tr;

    // Здесь указываются названия программ
    std::string name[marx_num] = {"my_app1", "my_app2","my_app3"};
    std::string temp;
    for (;;){
    	nanosleep (&tw, &tr);

    	for (int i = 0; i < marx_num; ++i)
    	{
    		temp = "pidof " + name[i];
    		if (system(temp.c_str()) > 0 ){
    			printf("%s не работает, перезапуск\n", name[i].c_str());
    			temp = "nohup /projects/workdir/" + name[i] + "/" + name[i] + "&";
    			system(temp.c_str());
    		} else
    		printf("%s работает\n", name[i].c_str());
    	}    	
    }
}
Тут программы лежат в папке workdir, и далее, каждая в своей папке. Например /projects/workdir/my_app1/my_app1 - путь до бинарника.

В рабочей версии нужно закомментить выводы в консоль printf.

Саму эту программу можно запускать вместо программ. Она убедится, что они не запущены и запустит их. Ещё можно так же убедиться, что они работают и, например, завершить их.


__________________
В сегнетиксе не работаю с самого начала 2019 года.
Gromov вне форума   Ответить с цитированием
Старый 28.04.2018, 14:14   #8
maks
Senior Member
 
Регистрация: Dec 2012
Сообщения: 164
Благодарил(а): 5 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Как отследить работу своей программы

Цитата
Сообщение от Gromov Посмотреть сообщение
Я когда-то делал на с++ такие вещи. Вот вам код, тут всё просто

Код:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <sys/time.h>
#include <ctime>
#include <locale.h>
#include <fstream>

#define timesec 10
#define timensec 1000 //loop задержка цикла

#define marx_num 3 // Количество программ

using namespace std;

#pragma GCC diagnostic ignored "-Wwrite-strings"

int main(int argc, char *argv[]){
    struct timespec tw = {timesec,timensec*100000};
    struct timespec tr;

    // Здесь указываются названия программ
    std::string name[marx_num] = {"my_app1", "my_app2","my_app3"};
    std::string temp;
    for (;;){
    	nanosleep (&tw, &tr);

    	for (int i = 0; i < marx_num; ++i)
    	{
    		temp = "pidof " + name[i];
    		if (system(temp.c_str()) > 0 ){
    			printf("%s не работает, перезапуск\n", name[i].c_str());
    			temp = "nohup /projects/workdir/" + name[i] + "/" + name[i] + "&";
    			system(temp.c_str());
    		} else
    		printf("%s работает\n", name[i].c_str());
    	}    	
    }
}
Тут программы лежат в папке workdir, и далее, каждая в своей папке. Например /projects/workdir/my_app1/my_app1 - путь до бинарника.

В рабочей версии нужно закомментить выводы в консоль printf.

Саму эту программу можно запускать вместо программ. Она убедится, что они не запущены и запустит их. Ещё можно так же убедиться, что они работают и, например, завершить их.
Спасибо, Дмитрий!
maks вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SM CONNECT (Подробная инструкция в картинках как настроить) alekseyeve SMConnect & SMConfig 230 27.03.2024 10:57
Как узнать IP адрес из программы в панели TRIM5 slt Вопросы о программировании 11 01.11.2019 17:52
как изменить работу водяного калорифера из "всегда" в "только зимой" (решено) Goscha SMConstructor (вентиляция) 2 22.05.2017 00:23
Аварии по питанию останавливают работу контура. Как избежать? (решено) sensei SMConstructor (теплопункты) 18 12.11.2014 16:57
Как оценить время выполнения программы в контроллере? Arsie ЧаВо - Часто задаваемые Вопросы 0 04.10.2013 16:51


Часовой пояс GMT +4, время: 10:06.


Версия vBulletin: 3.8.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2023