it-swarm-eu.dev

Udržujte procesy spuštěné i po odpojení relace SSH

Někdy mám dlouho spuštěné procesy, které chci nastartovat před odjezdem domů, takže vytvořím relaci SSH na serveru, abych začal proces, ale pak chci zavřít notebook a jít domů a později, po večeři, chci zkontrolujte proces, který jsem začal před odchodem z práce. Jak to mohu udělat se SSH? Chápu, že pokud přerušíte připojení SSH, přerušíte také svou přihlašovací relaci na serveru, čímž zabijete dlouhodobý proces.

216

Pomocí Nohup zajistěte, aby váš proces ignoroval signál zavěšení:

$ Nohup long-running-process &
$ exit
217
Warren Young

Chcete používat obrazovku GNU). Je to super!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+a , d odpojit se od relace obrazovky

exit                 #disconnect from the server, while run-a-long-process continues

Až se vrátíte do svého notebooku:

ssh [email protected]
screen -r            #resume the screen session

Pak se podívejte na průběh svého dlouhodobého procesu!

screen je velmi komplexní nástroj a dokáže udělat mnohem více, než jsem popsal. Během relace na obrazovce zkuste ctrl + a ,? naučit se několik společných příkazů. Pravděpodobně nejčastější jsou:

  • CTRL+a , c vytvořit nové okno
  • CTRL+a , n pro přepnutí na další okno v relaci obrazovky
  • CTRL+a , p pro přepnutí na předchozí okno v relaci obrazovky
  • pokud se přihlásíte z několika různých systémů, můžete se nechat nechat připojeného k aktivní relaci obrazovky na jiném počítači. z tohoto důvodu vždycky pokračuji s screen -d -r, aby bylo zajištěno, že pokud je k mé obrazovce připojen další Shell, bude odpojen před tím, než jej obnovím v aktuálním systému.
143
Sandy

Pokud jste neplánovali dopředu a nastavte screen atd., Proveďte následující:

  1. Pokud je váš proces spuštěn na pozadí: goto # 3, jinak: Ctrl-Z Pro pozastavení procesu v popředí. Tím se nahlásí číslo úlohy pozastaveného procesu, například:

    [1]+  Stopped                 processName
    
  2. Zašlete processName na pozadí s bg %1 (Pomocí jakékoli úlohy # následuje %). Tím se obnoví processName na pozadí.

  3. DisownprocessName s disown %1 Nebo disown PID. Použijte příznak -h, Pokud si chcete zachovat vlastnictví, dokud neukončíte svůj aktuální Shell.

42
Mike Covington

To, co chcete použít, je obrazovka nebo ještě lepší uživatelsky přívětivý obal kolem obrazovky s názvem byobu.

Obrazovka umožňuje spouštět více relací virtuálních terminálů ve stejné relaci ssh. K dispozici jsou návod a stránky nápovědy .

byob je obálka, která umožňuje snadno otevírat nové obrazovky pomocí jednoduché funkční klávesy namísto kombinace kláves z ctrl-a. Zobrazuje také stavový řádek se všemi otevřenými virtuálními terminály, které lze pojmenovat.

Další pěknou funkcí je skutečnost, že veškerá obrazovka může zůstat nahoře, zatímco je vaše ssh připojení odpojeno. Stačí se znovu připojit pomocí ssh a volat byobu a všechno je jako předtím.

Nakonec screenshoty byobu.

15
txwikinger

To by stálo za zmínku

ssh -t lala screen -rxU moo se připojí k relaci moo na hostiteli lala

ssh -t lala screen -S moo vytvoří na hostiteli moo relaci lala

a

ssh -t lala screen -S moo quux vytvoří na hostiteli moo relaci lala a spustí program quux a po dokončení relaci ukončí.

9
cjac

Zde najdete dobrého průvodce: držujte relaci SSH spuštěnou i po odpojení

Sudo apt-get install screen

Nyní můžete zahájit novou relaci obrazovky pouhým zadáním obrazovky do příkazového řádku. Zobrazí se vám několik informací o obrazovce. Stiskněte Enter a dostanete se na normální Prompt.

Pro odpojení (ale nechte relaci spuštěnou) Hit Ctrl + A a pak Ctrl + D v bezprostředním sledu. Uvidíte zprávu [odpojeno]

Chcete-li se znovu připojit k již spuštěné relaci

screen -r

Chcete-li se znovu připojit k existující relaci nebo vytvořit novou, pokud žádná neexistuje

screen -D -r

Vytvoření nového okna uvnitř relace běžící obrazovky Hit Ctrl + A a pak C v bezprostředním sledu. Zobrazí se nová výzva.

Přepnutí z jednoho okna do druhého Hit Ctrl + A a pak Ctrl + A v bezprostředním sledu.

Chcete-li zobrazit seznam otevřených oken Hit Ctrl + A a pak W v bezprostředním sledu

4

Stará otázka, zvláštní, nikdo nedoporučoval tmux , který funguje jako obal pro n konzole a udržuje je otevřená, dokud není potřeba. To umožňuje větší kontrolu, kromě řady funkcí, které má tmux. Je snadné jej spravovat, stačí spustit tmux, který vás přivede do jeho Shell, zahájit looong práci, pak stiskněte ctrl + b následované d (odpojení) (ctrl+b je „ok google“ tmuxu a d je příkaz k ukončení bez ukončení prostředí. To ve skutečnosti funguje, pokud jste právě blízko, například PuTTY. Po večeři, když se znovu připojíte, můžete znovu otevřít tmux pomocí tmux attach pro zobrazení obrazovky přesně tak, jak jste odešli. Něco, co miluji, dělí panel: ctrl+b a poté stiskněte ". Chcete-li přepnout z jednoho podokna na druhý, ctrl+b a poté stiskněte šipku nahoru/dolů.

4
nnsense

Používám NX NoMachine, což je pro mě zdarma, protože jsem to jen já. V podstatě spouští X relaci na serveru, ke kterému se můžete připojit a odpojovat znovu a znovu. X relace běží, i když nejste připojeni. Spojení lze provádět odkudkoli. Můžete si vybrat mezi plovoucími okny nebo jedním oknem obsahujícím celou plochu (např. Kompletní plochu Gnome). Klient (který byste provozovali na svém notebooku) lze provozovat na Linuxu, MacOSu, Solarisu nebo Microsoft Windows. V druhém případě, pokud zvolíte plovoucí okna, objeví se jednotlivě na hlavním panelu Windows.

Jako front-end pro své dva linuxové servery používám NX Nomachine používám svůj notebook Windows XP (který potřebuji pro určitý hardware specifický pro Windows, který mám)). Mohu dokonce tisknout na tiskárnu připojenou k můj Windows notebook z Linuxu.

2
Rob_before_edits

Tmux je dobrou volbou pro spuštění vašich dlouhodobých procesů na pozadí.

Musím pokračovat v běhu dlouhodobých procesů na cloudové platformě google VM instance/server (s OS: Ubuntu 16.0).) Kde musím spustit terminál SSH az terminálu mám udržet terminál připojený a spustit proces. Nyní je vše v pořádku. Ale počkejte, až bude spojení s mým terminálem SSH ukončeno, pak se dlouhodobé procesy okamžitě zastaví, a proto je musím znovu znovu spustit terminál ssh je restartován nebo z nového terminálu ssh.

Zjistil jsem, že tmux je dobrým řešením, jak se vyhnout ukončení procesů, které chceme spustit i po uzavření terminálu.

Terminálový multiplexor (tmux) pro zahájení relace tmux:

  1. Spusťte terminál ssh
  2. Zadejte tmux. Otevře se okno ve stejném terminálu.
  3. Spusťte příkaz pro spuštění dlouhotrvajících procesů v relaci tmux.

Nyní, i když je terminál SSH náhle uzavřen/ukončen, tmux relace bude nadále spouštět spuštěné lon-running procesy na instanci/serveru.

Pokud bylo připojení ukončeno, jak jej znovu připojit, abyste viděli procesy běžící v relaci tmux na pozadí:

  1. znovu připojit nebo otevřít nový terminál ssh. Chcete-li vidět tento proces (který je stále spuštěn na pozadí), zadejte: tmux attach příkaz.

Chcete ukončit relaci tmux:

  1. Zastavte proces. Poté do okna tmux-terminal zadejte exit.

(Všimněte si, že: Pokud použijeme tmux detach příkaz: bude ukončen z okna/terminálu relace tmux bez ukončení/zastavení relací tmux)

Více informací naleznete v následujícím článku:

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-background/
1
Yogesh