Autostart über Systemd geht nur manchmal

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Autostart über Systemd geht nur manchmal

Beitrag von MSfree » 01.01.2019 15:00:45

Back to topic :wink:

Eine UID ist (bzw. war traditionell) ein 16-Bit Integer, die einem Benutzernamen zugeordnet ist. Die Zuordnung findet mithilfe der Datei /etc/passwd statt, so daß die verschiedenen UIDs ab dem Zeitpunkt zur Verfügung stehen, nachdem das /-Dateisystem gemountet wurde, also schon als eine der ersten Maßnahmen im Bootprozeß. Man kann also schon von fast Anfang an auf Benutzernamen zugreifen. Mit dem Multiuser-Targert hat das aber in der Tat gar nichts zu tun.

Wir wissen hier aber im Moment noch nicht, ob das Problem von Richard mit dem einen oder anderen Vorschlag gelöst werden konnte.

Code: Alles auswählen

After=multiuser.target
ist sicher keine allzu schlechte Idee, zu dem Zeitpunkt sollte eigentlich alles notwerndige laufen.

Ich hätte noch dem Vorschlag, statt

Code: Alles auswählen

Restart=on-failure
würde ich es mal mit

Code: Alles auswählen

Restart=always
versuchen. Dann wird der Dientst halt so lange immer wieder gestartet, wenn er sich verabschiedet hat. So ganz ungefährlich ist die Option allerdings nicht, denn das kann bei fehlerhafter Software auch zu unnötiger Systemlast führen.

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Autostart über Systemd geht nur manchmal

Beitrag von Richard » 01.01.2019 18:13:56

JTH hat geschrieben: ↑ zum Beitrag ↑
31.12.2018 22:04:49
Wenn ein Service fertig konfiguriertes Netzwerk voraussetzt, sollte man ihn von network-online.target abhängig machen: Cut the crap! How do I make sure that my service starts after the network is really online?
Sollte man dann aber auch nicht eher Requires= statt After= verwenden?

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Autostart über Systemd geht nur manchmal

Beitrag von JTH » 01.01.2019 19:13:42

Requires= ist eine strengere Form von Wants=. After= und das Gegenstück Before= sind davon unabhängig, die können auch ohne Requires= oder Wants= benutzt werden.

Bei dir würden Requires= und Wants= den gleichen Effekt haben, üblich ist für diese Art „loserer“ Abhängigkeit das Wants=. Das After=network-online.target ist in beiden Fällen zusätzlich notwendig.
Manchmal bekannt als Just (another) Terminal Hacker.

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Autostart über Systemd geht nur manchmal

Beitrag von Richard » 05.01.2019 19:17:10

ReturnToSender hat geschrieben: ↑ zum Beitrag ↑
31.12.2018 20:41:39
Da sieht man es. Das Netzwerk wird zwar früher gestartet, ist aber erst später fertig verbunden.
Ich muss hier mal fragen an welchem Meldungen du das genau siehst?

Es scheint mit

Code: Alles auswählen

After=multiuser.target
After=network-online.target
jetzt zu laufen. Ohne multiuser.target gab es nochmal Probleme. Beim JDownloader hab ich ein ähnliches Problem, da ist der Prozess aber 'dead' und nicht inaktiv. Da es ein Java-Programm ist dauert es länger. Da hab ich jetzt

Code: Alles auswählen

Wants=network-online.target
After=multiuser.target
After=network-online.target
drin stehen und die letzten beiden Starts liefen. Sollte hier Wants= hinter After= stehen oder ist das egal? Das Wants= hab ich so aus einem Beitrag im Netz übernommen. JDownloader headless zu betreiben ist etwas knifflig.

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: Autostart über Systemd geht nur manchmal

Beitrag von mat6937 » 05.01.2019 19:36:14

Richard hat geschrieben: ↑ zum Beitrag ↑
05.01.2019 19:17:10
jetzt zu laufen. Ohne multiuser.target gab es nochmal Probleme.
Poste mal die Ausgaben von:

Code: Alles auswählen

systemctl list-units --all | grep -i multi-user

Code: Alles auswählen

systemctl list-units --all | grep -i multiuser
Gibt es das multiuser.target auf deinem PI?

BTW: Das multi-user.target in deiner service unit (siehe oben), durch den Schlüssel "WantedBy" in der Section "[Install]", legt fest wann die service unit gestartet wird. Es gibt auch das Target "graphical.target".
Ist dein PI so konfiguriert, dass der user (hier pi) sich automatisch einloggt (... nur falls für deine Anwendungen/service units erforderlich)?

ReturnToSender
Beiträge: 123
Registriert: 23.10.2018 18:06:09

Re: Autostart über Systemd geht nur manchmal

Beitrag von ReturnToSender » 05.01.2019 21:05:42

Richard hat geschrieben: ↑ zum Beitrag ↑
05.01.2019 19:17:10
ReturnToSender hat geschrieben: ↑ zum Beitrag ↑
31.12.2018 20:41:39
Da sieht man es. Das Netzwerk wird zwar früher gestartet, ist aber erst später fertig verbunden.
Ich muss hier mal fragen an welchem Meldungen du das genau siehst?
An der Uhrzeit. Deine Unit ist bereits um 16:16:21 gescheitert, das Netzwerk ist aber erst um 16:16:27 fertig verbunden. Ich würde es mit dem ExecStartPre versuchen, ich denke,das löst Dein Problem

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Autostart über Systemd geht nur manchmal

Beitrag von Richard » 07.01.2019 13:39:59

Schon klar über die Uhrzeit, aber welche Meldung wäre das?

ReturnToSender
Beiträge: 123
Registriert: 23.10.2018 18:06:09

Re: Autostart über Systemd geht nur manchmal

Beitrag von ReturnToSender » 07.01.2019 15:13:16

Richard hat geschrieben: ↑ zum Beitrag ↑
07.01.2019 13:39:59
Schon klar über die Uhrzeit, aber welche Meldung wäre das?
Das ist mit Netzwerken ein wenig komplizierter bis zu der Feststellung, jetzt ist es verbunden. Mit einiger Wahrscheinlichkeit ist es dieser Zeitpunkt in Deinem Log-Auszug, also erst nach diesen Meldungen:

Code: Alles auswählen

Dez 31 16:16:27 raspberrypi dhcpcd[388]: eth0: using static address 192.168.10.23/24
Dez 31 16:16:27 raspberrypi dhcpcd[388]: eth0: adding route to 192.168.10.0/24
Dez 31 16:16:27 raspberrypi dhcpcd[388]: eth0: adding default route via 192.168.10.1
Das bezieht sich aber jetzt nur auf eine LAN-interne IP-Adresse, die nicht internet-tauglich ist. 192.168.'er Adressen sind nie internet-tauglich. Das heisst, der DSL-Router selber müsste noch neben seiner LAN-internen Adresse (192.168.10.1) zusätzlich noch eine öffentliche IPv4-Adresse haben, um den PCs im LAN den Zugang ins Internet überhaupt zu ermöglichen. Aber, die hätte er wiederum nicht, wenn es bei Dir ein echter DS-Lite-Anschluss wäre, denn dann ist der Zugang ins Internet nur über eine öffentliche IPv6-Adresse möglich. Man erkennt bei Dir nämlich auch eine IPv6-Konfiguration. Ich weiss nicht, ob die modernen privaten DSL-Router sowas wie ein IPv4-to-IPv6-NAT durchführen können, glaub ich aber nicht. Also bei DS-Lite muss sich der PC erst mal via Soliciting aufmerksam machen, damit er dann via Advertisement eine Site-ID vom Router bekommt, mit der er schließlich selber via SLAAC eine eigene öffentliche IPv6-Adresse generieren kann.

Sorry, wenn das jetzt hier so ein wüstes Info-Gemenge ist, aber es soll Dir deutlich machen, dass eine Netzwerkverbindung nicht einfach nur ein umgelegter Schalter ist, sondern eine ganze Latte von Einzelschritten erfordert, was quasi einen komplexen Prozess darstellt, der leider eben eine gewisse Zeit beansprucht. Alle anderen Jobs, die gleichzeitig oder vorher starten und das Netzwerk benötigen, fallen halt auf die Nase. Also muss man das irgendwie verzögern. Darüber hinaus gibt es unter Debian nicht nur einen Weg, ein Netzwerk zu verbinden, sondern viele Möglichkeiten. Um das Log wirklich passend zu interpretieren, müsste man die genauen Gegebenheiten bei Dir kennen. Ohne dem muss sich die Interpretation an Standards orientieren... womit man leider manchmal auch leicht daneben liegen kann.

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Autostart über Systemd geht nur manchmal

Beitrag von Richard » 10.01.2019 21:04:35

Für den JDownloader hab ich es jetzt so gemacht, 2x rebooten lief problemlos. Mal sehen ob es in Zukunft auch so geht.

Code: Alles auswählen

[Unit]
Description=JDownloader
After=network.target

[Service]
Type=oneshot
UMask=000
ExecStart=/usr/bin/java -jar /home/pi/bin/jdownloader/JDownloader.jar
User=pi
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Hab ich mir aus dem Tiefen des Netzes ergoogelt.

Antworten