it-swarm.com.de

Systemd Service mit und ohne systemctl beenden

Was ist der Unterschied zwischen dem Beenden eines laufenden Daemon-Systemdienstes wie folgt:

kill -SIGKILL 3645

und

systemctl -s kill -SIGKILL 3645

wo ist 3645 die PID des systemd-Dienstes? Gibt es auch irgendwelche Nachteile bei der Verwendung der ersten Methode?

4
Gordon

Erstens ist Ihre systemctl -Syntax falsch: systemctl kill Erwartet einen Einheitennamen, keine PID, und -s Erfordert einen Signalnamen. Wie geschrieben, wird es nichts anderes tun, als Ihnen eine Fehlermeldung zu geben:

Failed to parse signal string kill.

Wenn Sie das beheben, wird es Ihnen sagen:

Failed to kill unit 3645.service: Unit 3645.service not loaded.

Die richtige Syntax wäre:

systemctl kill -s SIGWHATEVER whatever.service

Der Unterschied besteht natürlich darin, dass Sie Signale an Prozesse senden können, die auf der systemd-Einheit basieren, anstatt pid. Da eine Einheit möglicherweise mehrere Prozesse ausführt, kann systemd dasselbe Signal an alle Prozesse senden, die unter der Einheit ausgeführt werden. Dies ist in der Tat die Standardeinstellung. Mit der Option --kill-who= Können Sie dies bei Bedarf ändern.

Im Allgemeinen ist es jedoch keine gute Idee, sich daran zu gewöhnen, SIGKILL an irgendetwas zu senden. Sie sollten Ihre Dienste nach Möglichkeit normal einstellen, z. mit systemctl stop whatever.service. SIGKILL ist dasselbe wie das potenziell zerstörerische kill -9, Von dem Sie wahrscheinlich gehört haben und vor dem Sie gewarnt wurden. Wenn Sie einen Dienst über eine der beiden Methoden beenden und er so konfiguriert ist, dass er automatisch neu gestartet wird, kann dies der Fall sein. Dies kann oder kann nicht das sein, was Sie wollen, abhängig von warum Sie versuchen, ein Kill-Signal zu senden.

8
Michael Hampton