2015-07-21 13 views
8

Ich habe einen Cronjob in einem Docker Container ausgeführt, der überprüft, ob alle Dienste wie erwartet ausgeführt werden. Wenn diese Cronjobs feststellt, dass es ein Problem ist, würde Ich mag die Docker Behälter stoppen (von innen ...)Docker Container von innen zu stoppen

Leider exit einfach nicht mehr mein Cronjob Skript

+1

'shutdown -h jetzt '? – zero323

+0

Welches Bild basiert auf Ihrem Container? – Thomasleveil

+0

es ist von ubuntu: 12.04 –

Antwort

2

Grundsätzlich müssen Sie PID 1 verlassen die stoppen Container.

Ich dachte ursprünglich, kill -s SIGKILL 1 würde funktionieren, aber PID 1 ist geschützt, so ist es nicht.

Wie von @Thomasleveil vorgeschlagen, könnten Sie dem PID 1-Skript Code wie trap "exit" SIGINT SIGTERM hinzufügen, was bedeutet, dass der Prozess beendet wird, wenn eine kill -s SIGINT 1 gesendet wird. Ich bevorzuge diese Methode etwas zu der, die Sie entwickelt haben (den Kindprozess direkt beenden), da es dem Elternprozess eine Möglichkeit gibt, aufzuräumen, und auch der Elternprozess sollte die PID des Kindprozesses ohne awk finden können.

Wenn Sie jedoch mehrere Prozesse ausführen, sollten Sie in Erwägung ziehen, etwas wie Supervisord oder Runit zu verwenden.

+0

Ich dachte auch, aber konnte es nicht funktionieren. Hättest du eine Dockerfile für eine Vitrine? – Thomasleveil

+0

Ähm, nicht wahr? Gibt es eine Fehlermeldung? Nach welchem ​​Benutzer läuft der Cron-Job? –

+0

Ich habe versucht mit einem Shell-Skript, der Inhalt ist "Kill-SIGKILL 1" + Endlosschleife/Ruhezustand und Docker machen dieses Shell-Skript beim Start (als root). Also ich habe kein Cron, nur ein einfaches Skript läuft; Vielleicht kann sich ein Prozess nicht selbst töten? Auch "man 2 kill" scheint anzuzeigen, dass der Kill-Befehl es ablehnt, Signale an den Prozess zu senden, wenn dieser Prozess nicht explizit einen Handler für dieses bestimmte Signal definiert. – Thomasleveil

1

Ich habe versucht, Prozess 1 ohne Erfolg zu töten.

Probieren Sie den Kommentar von @ Zero323 mit shutdown -h now. Es funktioniert gut (sorry, ich kann nicht direkt dafür stimmen, da es nicht in der Liste der Antworten ist).

+0

Dies ist, was in dem neuesten ubuntu Bild passiert: > root @ b968bf313300:/# shutdown -h now können nicht mit dem Bus verbinden: Keine solche Datei oder das Verzeichnis fehlgeschlagen sprechen Sie mit dem Init-Daemon. Und es tut nichts. –

Verwandte Themen