"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Systemd service beendet nicht ordentlich

charmin 28.09.2022 - 16:19 2813 6
Posts

charmin

Super Moderator
10x
Avatar
Registered: Dec 2002
Location: aut_sbg
Posts: 14568
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

Rock and Stone, brother!
Avatar
Registered: Feb 2003
Location: Linz
Posts: 3644
Was sagt systemctl status, wenn es haengen bleibt?

Paste mal dein .service file rein.

charmin

Super Moderator
10x
Avatar
Registered: Dec 2002
Location: aut_sbg
Posts: 14568
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

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12069
`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

Super Moderator
10x
Avatar
Registered: Dec 2002
Location: aut_sbg
Posts: 14568
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

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12069
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

Super Moderator
10x
Avatar
Registered: Dec 2002
Location: aut_sbg
Posts: 14568
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!
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz