Die Argumente, nohup
die vor dem Pipe-Symbol beendet werden sollen, da die Shell Metachars wie |
und >
vor dem Aufruf des Befehls interpretiert .
Die bereitgestellte Befehlszeile leitet die Standardausgabe von nohup (nicht mysqldump
) an die Standardeingabe von gzip
. Wenn Sie sich abmelden, erhalten Ihre Shell und alle untergeordneten Prozesse ein Hangup-Signal. nohup
verhindert, dass das Signal den mysqldump
Befehl erreicht, der gzip
Befehl wird jedoch abgebrochen, da er immer noch an das steuernde Terminal angeschlossen ist, das beim Beenden der Sitzung geschlossen wird.
Sie können Ihren Befehl in ein Skript einfügen, wie von mnmnc vorgeschlagen, oder eine neue Shell aufrufen, um die gesamte Pipeline auszuführen:
nohup sh -c 'mysqldump -u user -ppass db | gzip > db.sql.gz' &
Hier nohup
wird ein einzelner Befehl aufgerufen sh
. Beachten Sie, dass die Standardausgabe standardmäßig an die Datei nohup.out
gesendet wird. Wir erwarten jedoch keine Ausgabe von diesem Befehl, da die Standardausgabe von umgeleitet wird mysqldump
.
Die neu erzeugte Shell ruft die Befehlspipeline auf mysqldump | gzip
und leitet die Standardausgabe gzip
in die angegebene Datei um.
Hier können Sie den Unterschied in den aufgerufenen Befehlen sehen (using dd
statt mysqldump
für diese Beispiele):
$ nohup dd if=/dev/urandom bs=1M count=50 | gzip > /tmp/out.gz & [1] 10721 nohup: ignoring input and redirecting stderr to stdout $ jobs [1] 10720 Running nohup dd if=/dev/urandom bs=1M count=50 10721 | gzip > /tmp/out.gz &
vs
$ nohup sh -c 'dd if=/dev/urandom bs=1M count=50 | gzip > /tmp/out.gz' & [1] 10792 nohup: ignoring input and appending output to ‘nohup.out’ $ jobs [1] 10792 Running nohup sh -c 'dd if=/dev/urandom bs=1M count=50 | gzip > /tmp/out.gz' &