So brechen Sie den nächsten Auftrag in der Reihenfolge nach rsync ab

So brechen Sie den nächsten Auftrag in der Reihenfolge nach rsync ab

Wenn zwei Jobs durch Semikolon getrennt in die Bash-Befehlszeile eingegeben werden:

$ job 1; job 2;

Wie breche ich den zweiten ab? Wenn ich CTRL+ drücke c, wird der erste abgebrochen und „Job 2“ gestartet. Ich möchte nur den zweiten Job stoppen, damit er nicht ausgeführt wird. Ich habe atq und ps ausprobiert, aber ohne Erfolg. Mit ps -ef kann ich nur „Job 1“ sehen, aber „Job 2“ ist nicht aufgeführt, daher kann ich PID nicht dazu bringen, „kill“ zu verwenden. Ich weiß, dass ich && anstelle von ; verwenden kann, aber jetzt ist es zu spät. Ich habe diesen Befehl versehentlich auf meinem Server statt auf meinem Heim-PC ausgeführt und versuche nun herauszufinden, wie ich ein Desaster verhindern kann.

Dieses Problem tritt speziell beim Befehl rsync auf, gefolgt von einem weiteren Befehl:

$ rsync ..... ; sudo shutdown -h now

Das Beenden eines Prozesses anhand der ID oder das Beenden seines übergeordneten Prozesses funktioniert nicht.

CTRLNach mehreren Stunden des Testens habe ich es auf rsync eingegrenzt, andere Befehle kann ich in unterschiedlicher Reihenfolge mit + beenden c, aber nicht, wenn sie nach Befehlen wie rsync oder ping kommen. Ich habe verschiedene Ubuntu-Versionen, Kernel, Server ohne Sudo-Benutzer ausprobiert und konnte es überall reproduzieren. Der beste Weg, dieses Problem zu vermeiden, besteht darin, && nach rsync zu verwenden, um den folgenden Befehl nur bei erfolgreichem Exitcode 0 auszuführen:

$ rsync .... && job 2

Antwort1

Töte dieübergeordneter Prozessvon job1 mit SIGKILL.

Zeigen Sie die Prozesse in einem Prozessbaum an, z. B. mit htopoder ps axfund beenden Sie dieübergeordneter Prozess von Job1und nicht job1 selbst.


Installieren htopmit

sudo apt-get install htop

Downvoter: Verstehen Sie die Antwort, bevor Sie sie downvoten

Antwort2

Ich glaube, Sie übersehen etwas. Wenn Sie zwei Befehle getrennt ausführen, ;können Sie beide Befehle mit CTRL+ beenden c.

Um sicherzugehen, versuchen Sie diesen Befehl:

find / -name a ; ls /home

Beenden Sie dann die obigen Befehle mit CTRL+ c. Dadurch werden beide Prozesse beendet. Ihre Home-Inhalte werden nicht aufgelistet. Das heißt, der nächste Befehl wird nicht ausgeführt.


AKTUALISIEREN:Das gilt auch für Deinen rsyncBefehl. Hier mein Beispiel:

$ rsync -avz /var/cache/apt/archives/ /tmp/backups/ ; sudo shutdown -h now

sending incremental file list
created directory /tmp/backups
./
authbind_1.2.0build3_amd64.deb
................
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
[sudo] password for user: 

Wie Sie oben sehen, wird beim Ausführen von CTRL+ cder erste Befehl beendet. Beim Starten von shudown werden Sie nach Ihrem sudoKennwort gefragt, sodass Sie den zweiten Prozess jetzt erneut mit CTRL+ beenden können c.


Aktualisierung 2Als Lösung für das Problem können Sie Folgendes tun:

  • da Sie passwortlos verwenden, müssen Sie Ihre Passwortabfrage sudoerneut durchführen , indem Sie Ihre Sudoer-Datei bearbeitensudosudo visudo
  • Als letzter Schritt, wenn nichts anderes funktioniertund nur ein Hack und es ist nicht ratsamBearbeiten Sie den /sbin/shutdownBefehl, um ihn zu entfernen +x, oder benennen Sie ihn einfach um.

verwandte Informationen