GNU/Linux >> Znalost Linux >  >> Linux

Příkaz Nohup v Linuxu vám umožňuje spouštět příkazy i po odhlášení

Nohup znamená „nezavěšovat“. Je to mimořádně užitečný příkaz, který zajistí běh vašeho procesu i po odhlášení.

Jedno z nejčastějších použití lze nalézt ve spouštění časově náročných příkazů přes SSH připojení. Pokud si myslíte, že vaše relace SSH může přestat, můžete použít příkaz s nohup tímto způsobem:

nohup your_command &

Co je příkaz nohup?

Nohup může být viděn jako obal. Příkazu předponujete nohup takhle:

nohup COMMAND ARGS ....

Nohup účelem je zachytit a zabránit SIGHUP signály od dosažení PŘÍKAZ .

Když před příkazem přidáte nohup , vstup bude přesměrován z nečitelného souboru ( nohup COMMAND ). Jednoduše řečeno, nevolejte příkaz pomocí nohup pokud potřebujete odeslat vstup do tohoto příkazu. Když nohup příkaz, musí být schopen běžet bez dozoru.

Nohup se nejprve pokusí přesměrovat výstup do ./nohup.out nebo jej odešle na ~/nohup.out v případě potřeby. Můžete se také rozhodnout, kam přesměrovat výstup takto:

nohup COMMANDS >/path/to/output/file

Onohup se toho moc říct nedá , nemá dlouhý seznam možností. Existuje pouze –pomoc a –verze .

Příklad použití příkazu nohup

Spuštění skriptu pomocí nohup je takto jednoduché.

nohup ./nhp.sh

Všimněte si, že nohup nepřevedl proces na pozadí. Nohup slouží pouze k zachycení SIGHUP signály. Jakmile je příkaz spuštěn, můžete pokračovat a zavřít terminál. Upozorní vás, že běží proces. Potvrďte, že ho chcete zabít.

Když jste zavřeli terminál, všechny podřízené procesy přijaly signál SIGHUP. Nohup zabránil tomu signálu dosáhnout mého rozkazu. Následující obrázek ukazuje procesní informace o mém příkazu, když byl terminál stále spuštěn.

Vidíš PPID? To je ID nadřazeného procesu. Když jste požádali o uzavření terminálu, všechny potomky PPID obdržely SIGHUP signál. Nohup zabránil tomu, aby signál dosáhl našeho skriptu. Nadřazený proces byl ukončen a náš skript osiřel. Když proces osiří, automaticky získá přiřazení 1 (systemd nebo init) jako rodič.

Jak vidíte, opravdu není těžké demonstrovat použití nohup . Velmi jednoduchý příkaz. Proces můžete rozvětvovat na pozadí takto:

nohup ./nhp.sh &

Můžete se také rozhodnout, kam bude výstup přesměrován, aby se vám to líbilo:

nohup ./nhp.sh >/path/to/file &

Pamatujte, že pokud vypnete nebo restartujete systém Linux, příkaz se ukončí. Když požádáte o vypnutí nebo restart, všechny procesy obdrží SIGTERM a poté SIGKILL . Tyto signály nohup nezachytí .

Nohup prostřednictvím připojení SSH

Jedno použití, které vás často hned napadne, když se naučíte nohup je být schopen spustit proces na vzdáleném počítači prostřednictvím SSH. Logicky spuštění příkazu pomocí nohup by vám umožnilo odhlásit se z vašeho připojení SSH a proces by stále běžel.

nohup COMMAND &

Jedním z běžných problémů je, že někdy SSH „zasekne“ při odhlašování. Je to proto, že SSH často odmítne ztratit jakýkoli datový tok do az jakýchkoli procesů na pozadí. Poté se „zasekne“, dokud nebude proces ukončen.

Tento problém lze často vyřešit přesměrováním všech 3 datových toků.

nohup COMMAND >./nohup.out 2>./nohup.err &

Doufám, že vám tento rychlý článek pomohl lépe používat relace SSH. Máte-li dotazy nebo návrhy, zanechte prosím níže komentář.


Linux
  1. Linuxový příkaz echo

  2. Příklady příkazů Nohup – Spustí příkaz, který běží i po vašem odhlášení

  3. Linux:Naplánujte spuštění příkazu jednou po restartu (ekvivalent RunOnce)

  1. 10 úžasných a záhadných použití (!) symbolu nebo operátoru v příkazech Linuxu

  2. 10 základních linuxových příkazů, které potřebujete znát

  3. Jak pomocí nohup pokračovat ve spouštění příkazu po odhlášení uživatele?

  1. 4 tipy, které vám pomohou co nejlépe využít příkaz Linux df

  2. Linuxové příkazy od A do Z

  3. 10 smrtících příkazů, které byste nikdy neměli spouštět na Linuxu