Wie führe ich ein Shell-Skript im Hintergrund aus?

55

Wie kann ich ein Shell-Skript im Hintergrund ausführen?

erkan şentürk
quelle

Antworten:

93

Fügen Sie je nach Wunsch einfach ein & am Ende des Befehls hinzu

script.sh &
command &

Wenn Sie es in einem Terminal ausführen und das Terminal dann schließen möchten, verwenden Sie nohup oder disown

Nohup

nohup script.sh &

verleugnen

script &
disown

Wenn das nicht das ist, wonach Sie suchen, gehen Sie bitte genauer auf Ihre Frage ein.

Panther
quelle
Sie sind herzlich willkommen
Panther
Was ist, wenn ich zum Beispiel 2 Skripte ausführen muss und dann ausführen möchte, um htopdie CPU-Auslastung zu sehen, aber das Problem ist, dass das erste Skript die Ausgabe an die Konsole erstellt und andere Aktionen zu verhindern scheint (zweites Skript ausführen, ausführen htop).
Mrgloom
Wenn das Skript Druckanweisungen enthält, werden diese auf meinem Terminal angezeigt?
Charlie Parker
2

Sie können einfach den Bildschirm wechseln und Ihr Skript auf dem zweiten Bildschirm ausführen. Wenn das Skript am 2. gestartet wurde, wechseln Sie wieder zum 1. und machen Sie, was Sie wollen. Der zweite Bildschirm wird im Hintergrund als zusätzliches "Terminalfenster" angezeigt. und die Verarbeitung wird auch dann nicht unterbrochen, wenn Sie Ihre SSH-Verbindung schließen, während Sie sich auf dem ersten Bildschirm befinden.

screen --help
Use: screen [-opts] [cmd [args]]
 or: screen -r [host.tty]

Options:
-4            Resolve hostnames only to IPv4 addresses.
-6            Resolve hostnames only to IPv6 addresses.
-a            Force all capabilities into each window's termcap.
-A -[r|R]     Adapt all windows to the new display width & height.
-c file       Read configuration file instead of '.screenrc'.
-d (-r)       Detach the elsewhere running screen (and reattach here).
-dmS name     Start as daemon: Screen session in detached mode.
-D (-r)       Detach and logout remote (and reattach here).
-D -RR        Do whatever is needed to get a screen session.
-e xy         Change command characters.
-f            Flow control on, -fn = off, -fa = auto.
-h lines      Set the size of the scrollback history buffer.
-i            Interrupt output sooner when flow control is on.
-l            Login mode on (update /var/run/utmp), -ln = off.
-ls [match]   or -list. Do nothing, just list our SockDir [on possible matches].
-L            Turn on output logging.
-m            ignore $STY variable, do create a new screen session.
-O            Choose optimal output rather than exact vt100 emulation.
-p window     Preselect the named window if it exists.
-q            Quiet startup. Exits with non-zero return code if unsuccessful.
-r [session]  Reattach to a detached screen process.
-R            Reattach if possible, otherwise start a new session.
-s shell      Shell to execute rather than $SHELL.
-S sockname   Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
-t title      Set title. (window's name).
-T term       Use term as $TERM for windows, rather than "screen".
-U            Tell screen to use UTF-8 encoding.
-v            Print "Screen version 4.01.00devel (GNU) 2-May-06".
-wipe [match] Do nothing, just clean up SockDir [on possible matches].
-x            Attach to a not detached screen. (Multi display mode).
-X            Execute <cmd> as a screen command in the specified session.

ctrl+ a, cWird ein neues „Fenster“ in der aktiven Bildschirmsitzung erstellen. Sie können zwischen mehreren Fenstern wechseln (wie Ansgar angegeben) mit ctrl+ a, nfür das nächste Fenster und ctrl+ a, pfür das vorherige Fenster.

ctrl+ azeigt "eine Liste aller geöffneten Fenster an.

Weitere Informationen : https://superuser.com/questions/476709/schnelles Wechseln zwischen dem Bildschirm für virtuelle Sitzungen

Lukas
quelle
1

Wenn Sie möchten, dass das Skript nach dem Schließen des Terminals erhalten bleibt, können Sie auch Folgendes verwenden setsid:

setsid script.sh

Weitere Informationen über die Unterschiede zwischen nohup, disown, &und setsid: Der Unterschied zwischen nohup, enteignen und &

Gohu
quelle