Ich brauche nohup
zwei Befehle, einen nach dem anderen. Der zweite Befehl muss NACH dem ersten Befehl ausgeführt werden. Hier sind die Befehle:
tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz
Ich muss die Befehle im Hintergrund ausführen, aber natürlich nicht beide gleichzeitig. Der zweite Befehl muss ausgeführt werden, nachdem der erste Befehl abgeschlossen ist. Ich habe Folgendes versucht:
nohup tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &
aber die Befehle werden nicht im Hintergrund ausgeführt. Die Bash-Eingabeaufforderung wartet, bis die beiden Befehle abgeschlossen sind, bevor sie mir eine weitere Eingabeaufforderung anzeigt. Ich muss sie im Hintergrund ausführen.
Wenn ich mache:
nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &
Das läuft perfekt im Hintergrund. Nur wenn ich versuche, mehr als einen Befehl auszuführen, passiert das.
Ich habe auch versucht:
nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 & ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &
Aber das hat auch nicht funktioniert. Ungültige Syntax oder so. Ich bin sicher, dass es eine Möglichkeit gibt, das zu tun, aber ich bin mir bei der Syntax nicht sicher.
Die einzige Alternative, die mir einfällt, besteht darin, die Befehle in eine .sh
Datei zu packen und diese Datei mit nohup zu öffnen. Das ist aber auf dem Linux-System, auf dem ich dies implementieren muss, nicht unbedingt möglich (Berechtigungsbeschränkungen usw.).
Antwort1
Einfachste Lösung: Erstellen Sie ein Shell-Skript mit
#/bin/sh
tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz
Und verwenden Sie nohup myscript
. Möglicherweise mit etwas zusätzlicher Dokumentation im Skript.
(Ja, ich bin ein Fan von Dokumentation. Besonders, wenn man mit mehreren Leuten zusammenarbeitet oder wenn man den Job irgendwann aufgibt und sein Nachfolger herausfinden muss, warum.)
Eine Alternative könnte darin bestehen, eine neue Shell für eine Unteraufgabe zu starten (in diesem Fall Ihr Tar und Move).
nohup `$(tar -zcf Archiv.tar.gz.tmp mein Verzeichnis; mv Archiv.tar.gz.tmp Archiv.tar.gz)
Alternative 2:
nohup ```tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz```.
Mir gefällt das Skript allerdings wirklich besser. Die darin enthaltenen Kommentare könnten sehr nützlich sein, wenn Sie oder jemand anders sich das Skript in ein paar Jahren ansieht und sich fragt, warum es so gemacht wurde.
Eine Anmerkung, die damit nichts zu tun hat: Wie zum Teufel poste ich eine Antwort mit einem Backtick darin? (Der Befehl für eine Shell, „diesen Befehl zu verwenden; die Ausgabe als Eingabe an einen anderen Befehl weiterzugeben“).
Antwort2
Ich glaube, Sie brauchen Klammern.
nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &
Antwort3
Vielleicht ein Bash Wrap?
nohup bash -c 'tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1' &
Antwort4
Mit können Sie screen
die Befehle erteilen und die Bildschirmsitzung beenden:
screen
tar -zcf archive.tar.gz.tmp mydir && mv archive.tar.gz.tmp archive.tar.gz
ctrl-a d to detach
Die Befehle werden wie mit nohup ausgeführt.