GNU/Linux >> LINUX-Kenntnisse >  >> Linux

systemd:SIGTERM unmittelbar nach dem Start

Wenn start.sh fertig ist, löscht systemd alles in derselben Kontrollgruppe wie start.sh

Ihre Optionen sind:

  • Einstellen von KillMode im Unit-Abschnitt zur Verarbeitung (der Standardwert ist control-group). Das bewirkt, dass systemd nur den Prozess beendet, den es direkt gestartet hat.

  • start.sh nicht dazu zu bringen, etwas im Hintergrund zu starten und zu beenden, sondern es direkt dort im Vordergrund auszuführen

Ich denke, in Ihrer Situation ist Option 2 praktikabel und unkomplizierter.

Quelle:https://unix.stackexchange.com/a/231201/45329


Obwohl der KillMode geändert wird bis process wie unten wird in Ihrer Situation funktionieren, es ist nicht die empfohlene Lösung.

[Service]
KillMode=process
...

Das Problem mit KillMode auf process setzen ist das systemd verliert die Kontrolle über alle Kinder des Prozesses, den es gestartet hat. Das heißt, wenn irgendetwas passiert und einer Ihrer Prozesse aus irgendeinem Grund nicht stirbt, bleibt er weiterhin bestehen.

Eine bessere Lösung in Ihrer Situation wäre, alle Prozesse zu erstellen und ihre pid beizubehalten und dann auf sie warten.

Der Wait-Befehl, den Sie in Ihrem Shell-Skript verwenden, kann je nach verwendeter Shell variieren (der von mir vorgeschlagene Link ist für Bash). Das Shell-Skript auf alle untergeordneten Elemente warten zu lassen, ist im Grunde dasselbe wie das Starten eines untergeordneten Elements, das nicht getrennt wird, im Vordergrund.

Also ungefähr so:

#!/bin/bash

# Start your various processes
process1 &
PROCESS1_PID=$!
process2 &
PROCESS2_PID=$!
process3 &
PROCESS3_PID=$!

# Wait on your processes
wait $PROCESS1_PID $PROCESS2_PID $PROCESS3_PID

# OR, if I'm correct, bash also allows you to wait on all children
# with just a plain wait like so:
wait

# reach here only after children 1, 2, and 3 died

Linux
  1. Beginnen Sie mit der Verwendung von systemd als Tool zur Fehlerbehebung

  2. Linux – Wie startet man Systemd ohne Default.target?

  3. Warum stoppt Systemd den Dienst sofort nach dem Start?

  4. X11-Anwendungen können nicht nach „su“ oder „su -“ für einen anderen Benutzer gestartet werden

  5. Systemd:Sowohl After als auch Requires verwenden

Wie werden Fsck-Festplatten nach einem Absturz in „systemd“ automatisch erzwungen?

Systemd-Dienst startet Nodejs nicht?

MongoDB kann nicht gestartet werden – ***Abbruch nach fassert()-Fehler

So starten Sie einen systemd-Dienst nach der Benutzeranmeldung und stoppen ihn vor der Benutzerabmeldung

Deaktivieren Sie einen systemd-Dienst nach einer Leerlaufzeit

PHP-FPM startet nach dem Neustart nicht automatisch