(14 odpovědí)
Uzavřeno před 3 lety.
I python skript s názvem scrape.py
. Jak název napovídá, je to webový prohledávač a chci, aby na mém počítači se systémem Linux běžel nepřetržitě i poté, co se odhlásím a ukončím relaci ssh. Hodně jsem tu četl a bylo tu mnoho návrhů na použití nohup python scrape.py &
. To fungovalo dobře, ale provádění skriptu se zastavilo, jakmile jsem se odhlásil. Také jsem prozkoumal supervisor
aplikace, ale nemám oprávnění root, takže to také selže. Můžete mi doporučit způsob, jak tento problém vyřešit? Děkuji.
Nejlepší odpověď
Existuje několik přístupů (nástrojů a příkazů), které můžete použít pro podobný účel:
-
Používejte terminálové emulátory jako
tmux
ascreen
:-
tmux
– terminálový multiplexor:umožňuje vytvořit řadu terminálů, přistupovat k nim a ovládat je z jedné obrazovky.tmux
lze odpojit od obrazovky a pokračovat v běhu na pozadí a později znovu připojit. Příklady jeho základního použití jsou uvedeny zde a zde. -
screen
– správce obrazovky s emulací terminálu VT100/ANSI. Jedná se o celoobrazovkový správce oken, který multiplexuje fyzický terminál mezi několika procesy (typicky interaktivními shelly)… Programy pokračují v běhu, když jejich okno aktuálně není vidět, a dokonce i když je celá relace obrazovky odpojena od uživatelského terminálu. Příklad použití je uveden zde.
-
-
Použijte oddělené příkazy prováděné na pozadí (čtěte také):
-
nohup
– spustit příkaz imunní vůči zablokování s výstupem na jiný než tty; Spusťte COMMAND, ignorujte signály zavěšení. Běžná syntaxe pro posunutí příkazu na pozadí a jeho odpojení od aktuální relace shellu:nohup COMMAND &
nebonohup COMMAND >/dev/null 2>&1 &
pokud chcete pozastavit informační soubor vytvořenýnohup
. Příklady jeho základního použití jsou uvedeny zde a zde. Zde je také ukázáno, jak jej používat pomocí příkazu ssh. -
disown
– podobně jakonohup
ale je to shell (zsh, ksh, bash) zabudovaný; slouží k odstranění úloh z tabulky úloh nebo k označení úloh, aby jim nebyl poslán signál SIGHUP, pokud jej přijme nadřazený shell (např. když se uživatel odhlásí). Příklad použití je uveden zde. -
setsid
– vytvoří relaci a nastaví ID skupiny procesů. Ukázka použitísetsid "COMMAND"
. Další příklady zde.
-
-
Použijte
huponexit
Možnost Bash:$ ./script.py > output.txt & [1] 7461 $ shopt -s huponexit $ exit
Reference:
- Jak používat Bash's Job Control ke správě procesů na popředí a na pozadí v DigitalOcean
-
Použijte správce plánů jako
at
acrontab
:-
at
– provádět příkazy později;at
abatch
číst příkazy ze standardního vstupu nebo zadaného souboru, které mají být provedeny později, pomocí/bin/sh
. Ukázkové použití:echo "COMMAND" | at now + 1 minute
. Další příklady zde. -
crontab
– naplánovat pravidelnou práci na pozadí; je dobře známý pro jiné účely, ale můžete určit určitý časový okamžik, kdy bude váš příkaz proveden pouze jednou. Zde je k dispozici pěkná kalkulačka crontab.
-
-
Vytvořte systémovou službu a spusťte ji, viz:
- Jak spustím jeden příkaz při spuštění pomocí systemd?
- Jak spouštět skripty při spuštění?