Manchmal benötigt man unter Linux die Möglichkeit einen einfachen Befehl im Hintergrund für eine längere Zeit ausführen zu lassen, z. B. zu Analysezwecken. Leider würde man diesen Befehl bzw. dieses Kommando abbrechen, wenn man das entsprechende Terminal schließt. Insbesondere wenn man per Remote zugreift, möchte man vermutlich, dass ein solcher Befehl völlig unabhängig vom geöffneten Terminal auch weiter ausgeführt wird. Man könnte natürlich überlegen dafür einen CronJob anzulegen, aber unter Umständen ist einem dies für einen überschaubaren Zeitraum von ein bis zwei Tagen zu viel Aufwand. Abhilfe schafft man mit dem Befehl „disown“.
Disown-Kurzanleitung
Im folgenden Beispiel hängt man ein „Und“-Zeichen, welches schon alleine dafür sorgt dass der Befehl im Hintergrund läuft, und den Befehl „disown“ einfach hinter den Befehlen an, die man sonst so im Terminal abgesetzt hätte:
1 2 |
sudo tcpdump -nS dst port 443 &> /var/www/logs/tcpdump-443.log & disown sudo tcpdump -i any port https -w /var/www/logs/tcpdump-443.pcap & disown |
Diese laufen dann durch „disown“ auch unabhängig vom Benutzer und dem Terminal, von dem aus sie abgesetzt worden sind, einfach im Hintergrund weiter. Und das solange der Computer läuft und man sie nicht manuell abschießt oder ihre einmalige Aufgabe erledigt ist.
Disown unter Linux
Im vorherigen Beispiel habe ich mir Daten von tcpdump zur späteren Auswertung in Wireshark abspeichern lassen. Um genau zu sein die Zugriffe, die den Destination Port 443 haben. Noch etwas feiner hatte ich das Abspeichern in einzelne Dateien mit einer Größenbeschränkung und Benennung mit Datum und Uhrzeit im Dateinamen erweitert und wie folgt laufen lassen:
1 |
sudo tcpdump -i any port https -G 300 -w '/var/www/logs/tcpdump-443_%Y-%m-%d_%H:%M:%S.pcap' & disown |
Auch hier ist wieder „disown“ angehangen.
Disown-Hintergrundbefehle beenden
Auch wenn die Befehle losgelöst vom Terminal bzw. der Session im Hintergrund laufen, will man dieses vermutlich irgendwann auch wieder beenden. Dies erreicht man ganz einfach über den „KILL“-Befehl. Für diesen benötigt man die entsprechende PID unter welcher das Kommando ausgeführt wird.
1 2 |
kill -9 *PID * kill -9 4088546 |
Die PID kann man sich mit top oder besser noch htop, wo man auch den kompletten Befehl und nicht nur das ausgeführte Programm sehen kann, besorgen.
Natürlich werden die Hintergrundbefehle auch abgeschossen und nicht wieder gestartet wenn man den Computer einfach komplett neu startet.