Systemd service beendet nicht ordentlich
charmin 28.09.2022 - 16:19 2813 6
charmin
Super Moderator10x
|
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!
|
Was sagt systemctl status, wenn es haengen bleibt?
Paste mal dein .service file rein.
|
charmin
Super Moderator10x
|
[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
AdministratorGNUltra
|
`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 Moderator10x
|
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
AdministratorGNUltra
|
|
charmin
Super Moderator10x
|
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!
|