Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Процес, който следи и при проблем рестартира програма в win
http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=9547
Страница 1 от 3

Автор:  MidNighT_SpiRiT [ Чет Ное 24, 2011 6:11 pm ]
Заглавие:  Процес, който следи и при проблем рестартира програма в win

Здравейте, пиша на C++/Qt една програма, която по някакви неизяснени причини
забива понякога, а това не е добре, защото тя трябва да работи непрекъснато.

Идеята ми е следната: от програмата пускам процес (програма без GUI), който да праща съобщения на главната програма през някакъв udp порт и тя да отговаря. Ако не отговори, процеса да "kill-не" забилата програма (може и да се е затворила по някаква причина) и да я стартира наново. В главната програма разбира се ще проверявам дали е пуснат вече процеса и няма да го пускам наново.
Добра ли е идеята?

Автор:  Cekins [ Чет Ное 24, 2011 6:37 pm ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Добра идея е да отстраниш причината за забиването... Тва е същото като да се оправят хардуерни проблеми със софтуерни гимнастики - винаги съм бил против. Ами я си представи че и скрития процес забие. Или пък някой антивирусна/файъруол го блокира...

Автор:  ToHu [ Чет Ное 24, 2011 7:11 pm ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Е отстраняването на забиването при Win приложение може да се окаже невъзможно, особенно при по сложни приложения и след 20-30 дни работа, да не говорим че в момента имам такъв пробелм със софтуер който струва 10 хил еур и уж е върхът на сладоледа а не могат да ми намерят решение.

Автор:  Cekins [ Чет Ное 24, 2011 11:05 pm ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Ами в такъв случай да не ползва Win ... Де да знам... Аз бих търсил проблема в софта, а не да се мъча да го рестартирам от време на време. Верно че като е голям софта става зор...

Автор:  gicho [ Пет Ное 25, 2011 9:44 am ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

+1 да се намери проблема в софтуера - не се знае дали няма да е по-лесно правенето на монитор. Ако е за помощ за търсене на проблема да го мислим, но за такова чудо не ...
Между другото, CCS на TexasInstruments има такава простотия - стои в трейа и следи дали основния процес не е забил :D . Но въпреки това не е добра идея.
Какво става ако "убиването" стане в кофти момента, и загуби работата на клиента, или счупи нещо друго? Що сърбеж ще има за разработчика...

Автор:  MidNighT_SpiRiT [ Пет Ное 25, 2011 10:19 am ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Да, най-добре би било да се открие проблема, но при мен не иска да забива. Софтуерът не прави кой знае какво, следи дали са се появили едни файлове в една папка, чете ги и после ги мести в друга, освен това ако трябва изпраща прочетените неща + малко потребителкси интерфейс. Важното в случая е да работи, защото файловете се слагат от далече и се очаква да се обработят. Другият проблем е, че шефа иска да записвам грешките в лог файл, но за сега не съм намерил начин, по който да ги прихвана, става въпрос за грешки от сорта на делене на нула и подобни ситуации :?

Автор:  gicho [ Пет Ное 25, 2011 2:51 pm ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

На какво е писан този софтуер? Remote debug не можеш да пуснеш? Някакъв лог, трейс, debugview? Ако е толкова прост софтуер би трябвало да е лесно да се разбере по логовете къде се случва.
Т.е. трябва ти exception handling - затова питам на какво е писан софтуера.

Автор:  syscop [ Пет Ное 25, 2011 3:38 pm ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Направи си exception handler. По нета има достатъчно инфо. Преди 10-тина години го имах тоя проблем - при мен всичко е ок, при клиента някой път гърми, а софта трябваше да работи 24/7. Ползвах функциите от dbghelp.dll. Като се оцапа нещо зписва в един архив необходимото инфо, пращат ми файла и след това през WinDbg гледах какво се е случило.

Автор:  zaphod [ Пет Ное 25, 2011 8:30 pm ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

живота не е идеален и понякога спасението е в такива куци решения като това. разбира се може да минеш на линукс, там нищо не забива, розови понита припкат по дъгата, а след година като се очистиш от корпоративната отрова лайната ти ще придобият аромат на рози ;) , но ако искаш да останеш на тъмната страна, препоръчвам ти не да пингваш процеса по удп, а обратното - процеса да се обажда, аналогично на wdt концепцията. ако ти го пингваш, не е сигурно дали няма бодро да отговаря а всъщност да е жива само отговарящата част.

Автор:  bongo_x2 [ Съб Ное 26, 2011 12:33 am ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Вчера четох статийка за космическите компютри - в тях се ползва същият трик, въпреки че са били проектирани да не забиват никога...

Автор:  plameniv [ Нед Ное 27, 2011 4:52 am ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

zaphod написа:
живота не е идеален и понякога спасението е в такива куци решения като това. разбира се може да минеш на линукс, там нищо не забива, розови понита припкат по дъгата, а след година като се очистиш от корпоративната отрова лайната ти ще придобият аромат на рози ;) , но ако искаш да останеш на тъмната страна, препоръчвам ти не да пингваш процеса по удп, а обратното - процеса да се обажда, аналогично на wdt концепцията. ако ти го пингваш, не е сигурно дали няма бодро да отговаря а всъщност да е жива само отговарящата част.

Може да не си фен на Линукс но имай предвид че не съм видял в цялата си практика с линукс повече от 13г вече сървър на Линукс да се рестартира заради ъпдейти освен ако не е kernel ъпдейт!
За забиването виждал съм и в Линукс програма да забива на няколко вида софтуер но като цяло системата не забива, килваш си процеса и продължаваш напред без рестарт. За WIN-а може да се пробваш да го килнеш процеса ама в повечето случай килването е малко вероятно да сработи и си трябва рестарт, не съм си играл толкова много вероятно вече WIN-7 версията да е по добре в това отношение !
И на win има как да се пуска нещо подобно на cronjob казва се Schedule task менажер, залагаш си проверяващия софт там, на минута мисля е възможно най честото стартиране. Най добре е да е версия на клиентския софтуер и да връща позитивен отговор ако всичко е наред ако не рестарт на програмата може и компа :)
Намира се :
Start button Picture of Start button, click Control Panel, and then click System and Maintenance. Under Administrative Tools, click Schedule tasks.

Автор:  palavrov [ Нед Ное 27, 2011 2:31 pm ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Абе я му сложи един хардуерен watchdog да рестартира целия компютър - ще работи желязно при всякакви условия :D

Автор:  MidNighT_SpiRiT [ Пон Ное 28, 2011 12:51 pm ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Ако беше при мен няма проблем да му сложа watchdog :lol:
Тази програма ще бъде при клиентите и трябва да работи непрекъснато (поне докато не я затворят по някаква причина) без да забива. Забиването се е случило при тях, а при мен работи и затова евентуалният проблем не е изяснен. Работя с Qt, но четох, че няма нищо готово за такива ситуации. Твърдо ще се работи с windows, защото клиентите работят с него, иначе може да се компилира и за linux, дори и за mac. Имате ли някакъв пример за exception handler или някъде да прочета?

Автор:  ps66 [ Пон Ное 28, 2011 1:36 pm ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Щом е win - поискай клиентите да ти пратят Control Panel->Administrative Tools->Window Logs->Application лога
ако е "принудително" затворено приложението ти - със сигурност ще има запис в него (доколко ще е полезен ... зависи и от теб)...

Автор:  ToHu [ Сря Яну 04, 2012 2:55 am ]
Заглавие:  Re: Процес, който следи и при проблем рестартира програма в

Ами по принцип да се направи по сложна win програма незабиваща е трудно но не невъзможно, при нас имаме вече сигурно над 1 млн реда код, с много мултимедия, мрежа и общо взето май всичко което може да се позлва по едно РС под WIN, забивания се случват веднъж на 10 дни, почти във всички случаи боза е проблема но има и софтуерни които няма как да се изчистят преди да са се появили поне 2-3 пъти, и много малък е шанса да се появят при тестване в офиса, освен ако не тестваме 100-на машини в рамките на една две години и 2-3-ма човека само с това да се занимават ... Та спасението е в кучето а тестери са ни клиентите, при голям брой копия шанса да хванеш някакъв странен бъг е доста по голям. Звучи гадно ама е така, но пък софтуера не управлява атомни централи така че те дорине го забелязват ако се случи.
Обаче в твоя случай говорим за нещо доста по просто, изключая мрежовата комуникация това горе долу го прави при нас едно модулче което се грижи за ъпдейт на съдържанието, под линукс работи идея си нямам колко време, по едно време беше умряло, ама не беше ясно защо, май от последния физически рестарт на сървъра не е рестартвано, поне 2-3 месеца има сигурно. Под боз същия код също работи, и май бая изкарва, не знам колко, на боз са ми само тестови машини които ги рестартирам по какви ли не причини, вкл. и при спиране на тока, но се е случвало да работи по 2-3 седмици преди рестарт и няма забиване. Та това което искам да кажа е по добре търси проблема. Детайли не помня, но MS боз имаше някаква гадост при работата с файлове, това което помня е че едни конфиг файлове уж се зьаписваха а после не бяха записани, та може нещо от работата с файловете да се окотва, или пък нещо мрежово, незатворени портове не знам как ти е написано, ама би трябвало да можеш да го докараш до състояние да не забива, а отделно кучето си е куче, за всяко по сериозно нещо си го иска ако ще и 1000% да е сигурно че не забива.

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/