Systemd service beendet nicht ordentlich

Seite 1 von 1 - Forum: Linux and other OS auf overclockers.at

URL: https://www.overclockers.at/linux/systemd-service-beendet-nicht-ordentlich_260686/page_1 - zur Vollversion wechseln!


charmin schrieb am 28.09.2022 um 16:19

Servus Leute,

Hab einen prototypen auf dem Raspberry PI laufen.
Dieser besteht aus mehreren ROS2 nodes, welche über ein ROS2 launch file gestartet werden.
Das launch file wird über ein bash script gestartet und dieser bash aufruf ist in meinem systemd service.

Ich habe öfter das Problem, dass einige ROS2 nodes in dem Programm nicht das tun was sie sollen und hängen bleiben.
Das letzte mal habe ich probiert den service neu zu starten, dann extra stop und extra start, etc. Half alles nichts.
Erst nachdem ich das eigentliche bash scrip ausgeführt (und geschlossen habe mit keyboard interrupt) habe in der CLI ging es, danach ging aber auch der service wieder ordentlich.

Irgendwie kommts mir vor, dass mein Service das programm nicht gscheid beendet, es sind multiple PIDs, weil halt mehrere nodes.
hat irgendwer nen tipp, was ich machen kann damit mein service ordentlich startet. es scheint irgendwie, dass ressourcen blockiert sind (auch über einen neustart hinweg).

tia!


issue schrieb am 28.09.2022 um 16:39

Was sagt systemctl status, wenn es haengen bleibt?

Paste mal dein .service file rein.


charmin schrieb am 28.09.2022 um 16:39

Code:
[Unit]
Description="ROS2 Bicycle CITS Data Collector service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
User=ubuntu 
WorkingDirectory=/home/ubuntu/ros_dev_ws/
ExecStart=pipenv run bash /home/ubuntu/ros_dev_ws/src/bicycle_cits_data_collector/scripts/start.sh

[Install]
WantedBy=multi-user.target

status sagt "running"


COLOSSUS schrieb am 11.10.2022 um 14:35

`systemctl status` muesste dir auch eine Reihe von PIDs in der fuer das Service erschaffenen Control Group listen koennen, die dafuer sorgen, dass es nicht als terminiert wahrgenommen wird. Was sagt denn das Journal der Unit zu der Tragoedie? (`journalctl -u deineunit -n 100` z. B.)


charmin schrieb am 12.10.2022 um 12:14

servus, danke für deine antwort.

hab mich noch etwas gespielt mit dem program.
wenn ich das skript händisch ausführe und dann beende mit CTRL+C, also SIGINT, dann beendet es ordentlich und lässst sich dann wieder starten.

Wenn ich das mit dem systemd mach, dann gehts net.
ich hab dann bei den nodes probiert, das SIGTERM vom systemd abzufangen und dann ordentlich zu beenden, aber das geht auch nicht gscheid.
programmiertechnisch sollts aber passen, weil wenn ich das aktive programm in den hintergrund verschiebe mit "bg", und es dann mit kill % beende, dann bekomme ich sehrwohl die einprogrammierte meldung, dass ein SIGTERM received wurde vom prozess.

systemd sollt doch SIGTERM schicken bei einem "sudo service "service" stop" oder net?
bzw halt der systemctl befehl.


COLOSSUS schrieb am 12.10.2022 um 13:02

Ja, tut es auch (SIGTERM senden). Du kannst das in einer Service Unit aber auch aendern: https://www.freedesktop.org/softwar...tml#KillSignal=

Tipp: Meine Fragen zu beantworten koennte auch dabei helfen, das Problem geloest zu bekommen ;)


charmin schrieb am 12.10.2022 um 13:18

Sorry!

journalctl sagt leider nichts hilfreiches. Eines der Programme hängt einfach in einer gewissen Methode (Python Programm, welches amqp Nachrichten versendet) fest und es passiert nichts mehr. Es wirkt so, als würden irgendwelche Ressourcen nicht freigegeben, weil die Prozesse nicht ordnungsgemäß beendet werden.
Hab und auch eine Led Anzeige (pimoroni blinkt!) Am Prototype zur statusausgabe. Die LEDs gehen aus wenn ich das Programm mit ctrl-c beende, allerdings nicht wenn es als Service läuft und ich den Service beende.


Systemctl Status schaue ich mir das nächste Mal an.

danke für deine zeit!




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2024