jak spustit vzdáleně na "SH" task na pozadí?

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Da Gony 19. 8. 2022 14:39

Existuje způsob, jak na cílovém počítači, kde je pouze shell "sh" (takže ne disown, nohup, jobs,fg,bg), spustit vzdáleně (z jiného pc přes ssh)nějaký proces na pozadí aby běžel dál? Aniž by to ssh muselo běžet na pozadí nebo zůstat otevřené?

Myslím, že jsou tu 2 body:
1. ssh klient - ukončení ssh klienta zavře všechny procesy i na pozadí.
2. samotný shell sh. Myslím, že spuštění příkazu s & ukončení shellu zohlední a příkaz poběží dál

Zkoušel jsem normálně s & na konci, ale což funguje většinou, ale z nějakého důvodu v pár případech u některých příkazů ne - nedoběhnou. Nebo mi to nefunguje ve 100%.
I když spustím příkaz s >/dev/null 2>&1, třeba ping se ukončí, ale wget běží dál.
Proč některé programy běží dál jiné ne? Jak docílit ,aby všechny programy běžely dál?



Nebo nějaké skryté věci, proč některé věci pokračují a jiné ne? Například builtin příkazy jako sleep se ukončí, ale externí binárky běží dál?
Da Gony
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 19. 8. 2022 17:56

Ukončení tasku po odhlášení z SSH záleží na typu aplikace, která se spouští.

Pokud přes SSH zapnu aplikace jako apache, mysql, dovecot, atd... tak nedojde k jejich ukončení. Za to aplikace jako top, ping, apod... se ukončí, jelikož pracují jen jako foreground.

Dodáním znaku & by mělo dojít k výstupu dat z aplikace namísto na monitor ( konzoli ) do NULLu ( toto asi není přesné, ale chová se to tuším takto ).

Takže by to chtělo zmínit o jaké aplikace jde.
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Da Gony 29. 8. 2022 16:12

Tak použití & je samozřejmost, bez toho by mě ani nenapadlo se ptát (ale zapomněl jsem to napsat), jelikož je ihned patrné že aplikace běží je zrovna "na popředí terminálu" a nejde psát příkazy do shellu. Pokud právě nejde právě o aplikace spuštěné s volbou démona, které se samy shodí na pozadí (nějakým mechanismem fork fork)

jde o wget, možná curl..

Zároveň vím, že když aplikace poběží na pozadí přes &, ale zablokuje se ji stdout, tak "spadne" (opravte mne, jak je to správně, asi dostane signál že stdout byl uzavřen, načež sama se ukončí), což je právě příklad wget bez přepínače -q.

Impulsem k dotazu bylo že prostě náhodně se mi stávalo, že po ukončení terminálu se mi ty procesy wget ukončily anichž bych věděl proč.


Ale u wget mě trápí ještě další věc, že vytváří wget.log i s přepínačem -q. (myslím, že ten soubor vznikne právě v okamžiku ukončení terminálu), ale soubor se dotáhne později.

Nicméně už jsem to asi vyřešil, za poslední dobu jsem nezaznamenal předčasná ukončení, vždy jsem používal wget -q --- &.

Má cenu pro jistotu ještě dávat 2>&1 1>/dev/null ?
Da Gony
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 29. 8. 2022 17:48

Bohužel takové znalosti linuxu ještě nemám. Neměl jsem zapotřebí si s tímto hrát - potřeboval jsem vždy jen zprovoznit určitou část :-)
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 30. 8. 2022 09:30

Na to jsou aplikace typu "screen" nebo "tmux", ktere ti udrzi otevreny shell i po odhlaseni. Ty tam nahodou nemas?

Pokud ne, mas asi jednou sanci, spoustet tu aplikaci pres nejaky systemovy nastroj (dnes nejspis systemd).

"Ukončení tasku po odhlášení z SSH záleží na typu aplikace, která se spouští." - nezalezi. Zalezi pouze na tom, jakym zpusobem je spoustena a ktery proces je jejim "rodicem" v seznamu procesu.

Asi by vam obema pomohlo napsat do terminalu "pstree", pokud je na vasem systemu k dispozici.

Primarni duvod ukonceni aplikace je ten, ze se uzavre SSH spojeni, tj. je ukoncen odpovidajici proces. A tim jsou ukonceny vsechny procesy na nej navazane, od shellu az po vsechny aplikace pres ten shell spustene.
JirkaVejrazka
Mírně pokročilý


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků