Portál AbcLinuxu, 11. května 2025 04:42

Dotaz: Automatické ukončení zamrzlého programu

21.2.2013 15:54 joseff | skóre: 4
Automatické ukončení zamrzlého programu
Přečteno: 313×
Odpovědět | Admin
Dobrý den,

potřebuji nějaký script, nebo příkaz, který hlídá, zda něco, co je spuštěné nezamrzlo.

Nezamrzlo, tím myslím, že linux naběhne a spustí požadované programy.

Ty běží několik týdnů a občas se stane, že některý z nich přestane reagovat.

Není ukončen, jen nereaguje.

A potřebuji, aby právě tento stav něco hlídalo a samo to ten zatuhlý proces ukončilo a zase zaplo.

Musí to killnout i věci, které se jednoduchým příkazem kill neukončí.

Pro Windows jsem to našel takto:
$File = FileOpen(@ScriptDir & '\killtask.bat', 2)
FileWrite($File, 'taskkill /f /fi "status eq not responding"')
FileClose($File)

While Sleep(30000)
    RunWait(@ScriptDir & '\killtask.bat', @SystemDir, @SW_HIDE)
WEnd
nebo
ECHO OFF
:LOOP
taskkill /f /fi "status eq not responding"
GOTO LOOP
Znáte na to nějaký jednoduchý script nebo příkaz pro Linux?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.2.2013 16:07 Petr "Glubo" Sýkora | skóre: 21 | blog: Glubnik
Rozbalit Rozbalit vše Re: Automatické ukončení zamrzlého programu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Obecne je velky problem urcit, zda je program zasekly, nebo ma jen moc prace. I to tve reseni pro windows muze jednoduse sejmout proces, ktery zrovna ma jen vic prace a nestihal chvili odpovidat na windowsi zpravy.
„O mrtvých jen v dobrém." „Pojďme se bavit o Stalinovi."
21.2.2013 16:16 joseff | skóre: 4
Rozbalit Rozbalit vše Re: Automatické ukončení zamrzlého programu
Chápu, a právě o to mi jde. Ten prográmek by to měl stíhat. Pokud to nestíhá, tak ho stačí ukončit, zase nahodit a vydrží několik týdnů, než zase začne blbnout. A proto potřebuji, aby ta reaktivace proběhla sama.

Nejjdenodušší by bylo, aby se vypnul a zapnul sám, třeba po dvou týdnech, ale to není zrovna profi a problém je, že to někdy vydrží jen pár dnů a jindy zase pár měsíců.
21.2.2013 17:00 ET
Rozbalit Rozbalit vše Re: Automatické ukončení zamrzlého programu
mno parkrat jsem videl "vytuhnout" apache na mutexech [kdyz se procesu smaze session file] - detekuju to rucne pomoci strace :/ - mozna by to pomohlo

jen tak pro zajimavost - ten programek co se zasekava je bezne pouzivanej [webserver,dbserver,etc...] nebo neco proprietary?
21.2.2013 17:20 joseff | skóre: 4
Rozbalit Rozbalit vše Re: Automatické ukončení zamrzlého programu
Bohužel ne. Jedná se o Mozillu. :-D

Ta se již řešila i jinde, ale nikde není finální řešení, jak zabránit jejímu zatuhnutí.

Jinou verzi Mozilly nebo prohlížeče nahrát nelze. V Mozille jsou možnosti nastavení, ale zatím nikdo neporadil, jak to kde nastavit. Jediná rada byla, aby se mozille přiřadilo více prostoru na HDD. To sice trochu prodlouží její životnost, ale problém to neřeší.

Proto hledám jinou možnost, jak to vyřešit obecně.

Případně znáte nějaké jiné použitelné řešení?
rADOn avatar 21.2.2013 17:36 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Automatické ukončení zamrzlého programu
Pokud ta godzilla běží headless tak je dost možné že visí na nějakém dialogu a čeká na OK. Update pluginů, špatný ssl certifikát, takové ty věci.

Jinak mozilla má dálkové ovládání, stačí počkat až zase zmrzne a podívat se jestli a na co reaguje.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
21.2.2013 18:02 joseff | skóre: 4
Rozbalit Rozbalit vše Re: Automatické ukončení zamrzlého programu
Tady problém nebude. A tyto příkazy z odkazu mi moc nepomohou, protože netuším, jak je použít.
rADOn avatar 21.2.2013 18:12 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Automatické ukončení zamrzlého programu
Třeba takhle:
radon@xenon ~ $ firefox -remote 'ping()'
radon@xenon ~ $ killall firefox 
radon@xenon ~ $ firefox -remote 'ping()'
Error: No running window found
radon@xenon ~ 2$
Ta dvojka je návratový kód, čili to můžeš odchytit v shellu. Ale musíš to otestovat v praxi – může to být zatuhlý tak že ping bude fungovat a něco jiného ne. Pak by nastoupily složitější způsoby, třeba otevřít si nějakou stránku a bokem testovat jestli jí opravdu otevřel.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
rADOn avatar 21.2.2013 17:27 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Automatické ukončení zamrzlého programu
V unixu není nijak specifikováno 'odpovídání'. Ostatně, ani ve wydlích na to není spoleh jak bylo řečeno výše. Potřebuješ nějaký heartbeat, podle kterého se pozná jestli proces žije. Dají se na to vymyslet různé vylomeniny. Pokud máš zdroják tak asi nejjednodušší a nejčistší je zachytit si nějaký signál, například USR2 a když dorazí tak zapsat časovou známku do zvláštního souboru. To pak můžeš monitorovat. Pokud zdroják nemáš a onen program nic takového neumí, musíš najít něco co jde monitorovat zvenčí. Například http server můžeš periodicky HEADovat a kontrolovat odpověď. Databázi budeš posílat "SELECT 42", et cetera. Zkrátka si musíš najít nějaký podnět na který aplikace reaguje jasným způsobem – spousta unixových aplikací například na HUP nebo USR1 přenačte logy a/nebo upustí otevřené deskriptory a většinou o tom napíše něco do logu co pak lze dohledat. Nebo něco méně invazivního, nějak kreativně podělaný vstup který vyprovokuje nějakou dohledatelnou hlášku v logu.

BTW než se do něčeho takového pustíš tak si hodně dobře posichruj všechno ostataní nebo ještě lépe doplň nějaké testy příčetnosti, například že restart neproběhne častěji než N-krát za hodinu nebo že zaber až na N-tý fail… Podělat se může ledasco, a může se snadno stát že tvoje aplikace je naprosto v pořádku a nereaguje proto že visí v kernelu a čeká až ji nějaký jiný proces pustí k lizu. Když je mašina uswapovaná nebo přeforkovaná tak otáčení velkých procesů věci zrovna nepomůže.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
21.2.2013 17:46 joseff | skóre: 4
Rozbalit Rozbalit vše Re: Automatické ukončení zamrzlého programu
Přesně toto mě též napadlo. Potíž je, že to zařízení má jenom síťový port (LAN) COM a LPT vůbec nemá.

Zařízení pracuje spíše externě bez nutnosti připojení k síti, nebo internetu. - pouze k jinému zařízení

Proto mě jako možnost napadlo udělat nějaký jednoduchý příkaz, nebo script, který by měl za úkol za 25sec provést vypnutí a zapnutí Mozilly. No a pokud by Mozilla fungovala, jak má, tak z ní, nebo z HTML stránky by někam šel každých 10sec pokyn znovu nahodit ten odpočet na 25sec.

Ano, představuji si to moc jednoduše, ale kdyby to bylo tak jednoduché, tak jsem si to již dávno udělal. :-D

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.