Tmux: jak nechat session na živu, když program v ní skončí

Ahoj,

něco se nepodařilo s mým Orange Pi Zero, které mi měřilo výšku hladiny ve studni a musel jsem znova nainstalovat Armbian. Bohužel, já vůl, jsem si nezaznamenal, jak zněl ten příkazový řádek, kterým se spouštěl pythoní program v tmuxu, ale když se program ukončil, session zůstala naživu, zůstal tam příkazový řádek a nad tím případná chyba toho pythoního skriptu. Protože když dám:

Kód: [Vybrat]
tmux new -d -s studna -c '/home/pi/studna' 'python studna.py'
tak v okamžiku, kdy program vyhodí neošetřenou chybu, tak je po session a já se ani nedozvím, co to je za chybu. Googlím to už nějakou dobu, ale toho správného rezultátu se ne a ne dogooglit, lehce se to přiblížilo tady: https://stackoverflow.com/questions/31902929/how-to-write-a-shell-script-that-starts-tmux-session-and-then-runs-a-ruby-scrip

ale já tam měl maloučko jinak, byť "bash" se tam asi taky někde vyskytovalo. Prosím poraďte. Díky.
« Poslední změna: 20. 10. 2018, 13:42:03 od Petr Krčmář »


Re:TMUX-jak nechat session na živu, když program v ní skončí
« Odpověď #1 kdy: 19. 10. 2018, 18:14:53 »
uf, nějaké osvícení a už jsem na to přišel:

tmux new -d -s studna -c '/home/pi/studna' 'python studna.py;bash'

m

Re:Tmus: jak nechat session na živu, když program v ní skončí
« Odpověď #2 kdy: 20. 10. 2018, 11:19:28 »
nechavat servicy jet v tmuxu ... fuj.

Co tahle z toho udelat normalni Unit servicu a nechat logovat na nejake spravne misto .. treba do jurnalu, syslogu mebo nekam jinam.

+ muzes mit failover a automaticky restart ..

Lol Phirae

Re:Tmus: jak nechat session na živu, když program v ní skončí
« Odpověď #3 kdy: 20. 10. 2018, 11:22:59 »
Ne každý má náladu na Lennartovy kokotiny.

P.S. Service se překládá jako služba...  :o ::)

Re:Tmus: jak nechat session na živu, když program v ní skončí
« Odpověď #4 kdy: 20. 10. 2018, 11:39:15 »
Ne každý má náladu na Lennartovy kokotiny.
Chápu to správně, že funkční a přímočaré řešení ti vadí a tenhle bastl ti přijde lepší?


Yokotashi

Re:Tmus: jak nechat session na živu, když program v ní skončí
« Odpověď #5 kdy: 20. 10. 2018, 11:43:33 »
Lol Phirae:
http://without-systemd.org/wiki/index.php/How_to_remove_systemd_from_a_Debian_jessie/sid_installation

Fakt je, ze v tomto pripade je asi lepsi dat to nekam do /etc/init.d, protoze to prezije restart.

PedroKV:

Lepsi, nez pustit to a hned za tim pustit bash je podle me udelat si wrapper v bashi, ktery to pousti porad ve smycce s tim, ze loguje cas a navratovou hodnotu, kdyz se neco podela. A aby to slo stopnout, tak testovat nejaky soubor.

while ! grep -q "chcipni" /tmp/studna; do
   /home/nekdo/bin/studna >> /home/nekdo/log/studna
   echo "Died at $(date) with return value: $?" >> /home/nekdo/log/studna
   sleep 10
done

A program by samozrejme nemusel chcipnout hned, jak najde nejake nesrovnalosti. Ale kdyz to udela, tak ta smycka porad nevytizi cely procesor a nezasere disk logy, protoze tam je tem sleep.

Muzu se zeptat jaky je v te studni senzor a jak dlouho uz to spolehlive funguje? Resil jsem podobny problem a dospel jsem k tomu, ze rtutove spinace nejsou prakticke, posuvne magnetu zarustaji rasami (nebyla to studna) a nerezove desky pripojene pres 10k na bazi tranzistoru prestavaji po nejake dobe fungovat. A pouzit tu vodu jako elektrolyt a rozpoustet v ni tim nejaky kov nechci.

Youda

Re:Tmus: jak nechat session na živu, když program v ní skončí
« Odpověď #6 kdy: 20. 10. 2018, 12:56:11 »
Ahoj,

něco se nepodařilo s mým Orange Pi Zero, které mi měřilo výšku hladiny ve studni a musel jsem znova nainstalovat Armbian. Bohužel, já vůl, jsem si nezaznamenal, jak zněl ten příkazový řádek, kterým se spouštěl pythoní program v tmuxu, ale když se program ukončil, session zůstala naživu, zůstal tam příkazový řádek a nad tím případná chyba toho pythoního skriptu. Protože když dám:

Kód: [Vybrat]
tmux new -d -s studna -c '/home/pi/studna' 'python studna.py'
tak v okamžiku, kdy program vyhodí neošetřenou chybu, tak je po session a já se ani nedozvím, co to je za chybu. Googlím to už nějakou dobu, ale toho správného rezultátu se ne a ne dogooglit, lehce se to přiblížilo tady: https://stackoverflow.com/questions/31902929/how-to-write-a-shell-script-that-starts-tmux-session-and-then-runs-a-ruby-scrip

ale já tam měl maloučko jinak, byť "bash" se tam asi taky někde vyskytovalo. Prosím poraďte. Díky.

He, co na tom jako chces resit?
O presmerovani stdoout a stderr do fajlu a o utilite "tee" uz jsi slysel?

okin

Re:Tmus: jak nechat session na živu, když program v ní skončí
« Odpověď #7 kdy: 20. 10. 2018, 15:41:00 »
Lol Phirae:
http://without-systemd.org/wiki/index.php/How_to_remove_systemd_from_a_Debian_jessie/sid_installation

Fakt je, ze v tomto pripade je asi lepsi dat to nekam do /etc/init.d, protoze to prezije restart.

PedroKV:

Lepsi, nez pustit to a hned za tim pustit bash je podle me udelat si wrapper v bashi, ktery to pousti porad ve smycce s tim, ze loguje cas a navratovou hodnotu, kdyz se neco podela. A aby to slo stopnout, tak testovat nejaky soubor.

while ! grep -q "chcipni" /tmp/studna; do
   /home/nekdo/bin/studna >> /home/nekdo/log/studna
   echo "Died at $(date) with return value: $?" >> /home/nekdo/log/studna
   sleep 10
done

A program by samozrejme nemusel chcipnout hned, jak najde nejake nesrovnalosti. Ale kdyz to udela, tak ta smycka porad nevytizi cely procesor a nezasere disk logy, protoze tam je tem sleep.

Muzu se zeptat jaky je v te studni senzor a jak dlouho uz to spolehlive funguje? Resil jsem podobny problem a dospel jsem k tomu, ze rtutove spinace nejsou prakticke, posuvne magnetu zarustaji rasami (nebyla to studna) a nerezove desky pripojene pres 10k na bazi tranzistoru prestavaji po nejake dobe fungovat. A pouzit tu vodu jako elektrolyt a rozpoustet v ni tim nejaky kov nechci.
Zdravim
Nerezove kontakty (valecek o prumeru cca 12 mm a delky cca 40 mm osazeny v delce cca 20 mm na prumer 4 mm a sem pripajene izolovane lanko, spoj zaizolovany smrstitelnou spagetou s lepidlem a jiz mnoho let takto mi ve studni a nadzemni nadrzi  slouzi. Jen je treba pouzit stridavy proud, usmernovac, relatko a pridrzny kontakt a dat dve elektrody do vody jakoze spodni hladinu a horni hladinu.

Yokotashi

Re:Tmux: jak nechat session na živu, když program v ní skončí
« Odpověď #8 kdy: 20. 10. 2018, 17:04:44 »
okin: diky. Ja pouzil stejnosmerny a na stridavy uz se mi to predelavat nechtelo. Tou vodou zkrz ty dva nerezove valce proteka proud, ktery jde po usmerneni do civky rele?

okin

Re:Tmux: jak nechat session na živu, když program v ní skončí
« Odpověď #9 kdy: 20. 10. 2018, 21:39:45 »
okin: diky. Ja pouzil stejnosmerny a na stridavy uz se mi to predelavat nechtelo. Tou vodou zkrz ty dva nerezove valce proteka proud, ktery jde po usmerneni do civky rele?
Zdravim
Schema je nasledujici:
https://uloz.to/!4Nsi13EzH0hw/hladinove-rele-png
Je nutne pouzit stridavy proud ktery prochazi vodou jinak se voda rozklada, elektrody se obaluji bordelem a vse po case prestava fungovat. Taky je potreba aby tekl vodou proud aspon v radu jednotek mA. Elektrody nutno mit z nerezu a je treba vyresit napojeni na kablik aby spoj netrpel korozi.

Jenda

Re:Tmux: jak nechat session na živu, když program v ní skončí
« Odpověď #10 kdy: 20. 10. 2018, 22:55:19 »
Ty jo, 24 V a rovnou relé?

Yokotashi: střídavý proud bych řešil tak, že bych to připojil na GPIO piny libovolného procesoru, který umí nastavovat aktivní LOW i HIGH, a přepínal je vždycky proti sobě. Navíc můžeš měřit třeba jenom jednou za minutu sekundu (hladina se asi nemění tak často), čímž elektrolýzu omezíš na 1/60...

Yokotashi

Re:Tmux: jak nechat session na živu, když program v ní skončí
« Odpověď #11 kdy: 21. 10. 2018, 14:33:08 »
okin: diky. Ja mel dve velkoplosne nerezove elektrody, odpor, tranzistor a rele se zpetnou diodou a to nechodilo zjevne kvuli stejnosmernemu proudu (a protekalo tim par desitem mikroamper, aby nebyl problem s elektrolyzou).

Proc musi vodou protekat alespon par mA? To je empiricky zjistene, nebo to ma nejaky znamy duvod?

Jenda: Jasne. Ale na druhe strane vesnice uhodi blesk a misto tranzistoru menim procesor. Takze se mi do toho nechtelo.

V kazdem pripade mam dalsi inspiraci a muzu celou zimu prokrastinovat a vymyslet nejlinejsi reseni, abych to na jare za pul hodiny ubastlil :-).

okin

Re:Tmux: jak nechat session na živu, když program v ní skončí
« Odpověď #12 kdy: 21. 10. 2018, 15:55:13 »
okin: diky. Ja mel dve velkoplosne nerezove elektrody, odpor, tranzistor a rele se zpetnou diodou a to nechodilo zjevne kvuli stejnosmernemu proudu (a protekalo tim par desitem mikroamper, aby nebyl problem s elektrolyzou).

Proc musi vodou protekat alespon par mA? To je empiricky zjistene, nebo to ma nejaky znamy duvod?

Jenda: Jasne. Ale na druhe strane vesnice uhodi blesk a misto tranzistoru menim procesor. Takze se mi do toho nechtelo.

V kazdem pripade mam dalsi inspiraci a muzu celou zimu prokrastinovat a vymyslet nejlinejsi reseni, abych to na jare za pul hodiny ubastlil :-).
Zdravim
No duvod one proudove hodnoty je ve svodech ktery muzou byt zpusobeny vlhkym povrchem izolace kabliku, ruzny bordel v podobe vodnich ras v nadrzi ktery se potahne po elektrodach a kabelech apod. Toto vse lze uspesne eliminovat prave potrebou dostatecneho proudu k sepnuti rele. Moje zapojeni slouzi jako rele s pridrznym kontaktem takze lze pouhou zmenou vysky elektrod min a max nastavit spinani resp rozpinani rele pri zmene hladiny. Mit rele a jen jednu elektrodu tak rele bude spinat/rozepinat pri pouhem milimetru zmeny hladiny vody coz je docela k nicemu pac treba cerpadlo bude takto porad zapinat a vypinat coz je blbost. Takto rele sepne az po dosazeni maximalni hladiny a vypne po poklesu pod minimalni hladinu. Jednoduche liz leta overene v praxi a bez nejmensich poruch a potreby cistit elektrody apod. Pokud chcete udelat na tutovku tak pouzijte kabel 3x0,75 mm lanko (bezny kabel k elektrickym spotrebicum) odizolojte cca v delce dle potrebneho rozsahu sledovani hladiny a jednotlive zily zakratte dle potreby. Zelenozluty nechte nejdelsi aby mel vzdy kontakt s vodou. Ostatni dva vodice zakratte dle potreby ale tak aby kovove elektrody se nemohly dotykat navzajem. Pak velmi zalezi taky na dokonalem zaizolovani spoje kabliku a nerezove elektrody. Jak jsem jiz psal tak mam elektrody prumeru 12 mm delky cca 50 mm a osazene v delce cca 15 mm na prumer 4 mm kde mam pripajeny vodic a spoj je prekryty teplem smrstitelnou spagetou ktera navic obsahuje lepidlo ktere zabrani vnikani vlhkosti k pajenemu spoji. Vice mrknete tady: https://uloz.to/!ejWVVk8IUIf2/hladinovy-spinac-kontrukcni-priklad-zip