Systemd Service läuft nicht durch

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
RaainER
Beiträge: 8
Registriert: 04.05.2021 11:57:36

Systemd Service läuft nicht durch

Beitrag von RaainER » 04.05.2021 12:34:34

VM mit aktuellem debian / Kde. In /etc/systemd/system/boot.service einen Service erstellt (und enabled) mit:

Code: Alles auswählen

[Unit]
Description=Wird ausgeführt bei boot

[Service]
User=user11
Type=simple
ExecStart=/usr/bin/boot.sh

[Install]
WantedBy=multi-user.target
Der Service soll bei boot folgendes Skript in /usr/bin/boot.sh aufrufen:

Code: Alles auswählen

#!/bin/bash
touch /home/user11/system_l.txt &&
cd /home/user11/vitoop &&
docker-compose up -d &&
chromium --start-fullscreen http://localhost:8080 &
Bei reboot wird die Datei "system_l.txt " in der ersten Zeile erstellt, aber dann läuft das Skript nicht weiter.
sudo systemctl status boot.service ergibt:

Code: Alles auswählen

● boot.service - Wird ausgeführt bei boot
   Loaded: loaded (/etc/systemd/system/boot.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Tue 2021-05-04 11:21:46 CEST; 2min 12s ago
  Process: 334 ExecStart=/usr/bin/boot.sh (code=exited, status=0/SUCCESS)
 Main PID: 334 (code=exited, status=0/SUCCESS)

Mai 04 11:21:45 debian systemd[1]: Started Wird ausgeführt bei boot.
Mai 04 11:21:46 debian systemd[1]: boot.service: Succeeded. 
Die Ausgabe von $PATH ist:

Code: Alles auswählen

bash: /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games: Datei oder Verzeichnis nicht gefunden
Manuel im Terminal kann ich das Skript ohne Probleme ausführen. Mit einem Cronjob @reboot gibt es das selbe Ergebnis. Kann mir bitte jemand einen kurzen Tipp geben?

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Systemd Service läuft nicht durch

Beitrag von MSfree » 04.05.2021 13:21:00

Programmaufrufe in Systemskripten muß man mit Absolutpfaden starten. Das System weiß nicht, in welchem Verzeichnis die Programme docker-compose und chromium liegen.

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

Re: Systemd Service läuft nicht durch

Beitrag von JTH » 04.05.2021 13:40:03

MSfree hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 13:21:00
Programmaufrufe in Systemskripten muß man mit Absolutpfaden starten. Das System weiß nicht, in welchem Verzeichnis die Programme docker-compose und chromium liegen.
Nicht dass man das sicherheitshalber nicht machen sollte, aber notwendig ist es in diesem Szenario nicht. systemd benutzt einen hardkodierten PATH, der dem entspricht, was man da normalerweise erwartet (siehe man systemd.exec). Der PATH wird auch den Services mitgegeben.

RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 12:34:34

Code: Alles auswählen

Type=simple
Type=simple ist der Standardwert, kann man weglassen.

RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 12:34:34

Code: Alles auswählen

#!/bin/bash
[…]
chromium --start-fullscreen http://localhost:8080 &
systemd erwartet (bei Type=simple), dass die Haupt-PID eines Services dauerhaft läuft – das wäre hier das Skript. Wenn sich das beendet, werden alle zum Service gehörigen Kind-PID mit beendet, hier chromium. Das & am Ende ist kontraproduktiv.

Ansonsten: Was möchtest du denn erreichen? Wo soll der Chromium überhaupt laufen/zu sehen sein? Aus einem Service kann man nicht mal so eben eine grafische Anwendung starten.
Manchmal bekannt als Just (another) Terminal Hacker.

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

Re: Systemd Service läuft nicht durch

Beitrag von mat6937 » 04.05.2021 14:00:22

RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 12:34:34

Code: Alles auswählen

[Unit]
Description=Wird ausgeführt bei boot

[Service]
Manuel im Terminal kann ich das Skript ohne Probleme ausführen.
Evtl. mal mit folgenden Abhängigkeiten in der [Unit]-Section testen:

Code: Alles auswählen

After=sys-subsystem-net-devices-eth0.device
Requires=time-sync.target
After=time-sync.target
Requires=systemd-time-wait-sync.service
After=systemd-time-wait-sync.service
(das eth0-Interface musst Du evtl. anpassen).

Oder Du startest die deaktivierte service-unit, mit einer timer-unit, z. B. 30 Sekunden nach dem Booten.

RaainER
Beiträge: 8
Registriert: 04.05.2021 11:57:36

Re: Systemd Service läuft nicht durch

Beitrag von RaainER » 04.05.2021 16:30:22

MSfree hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 13:21:00
Programmaufrufe in Systemskripten muß man mit Absolutpfaden starten. Das System weiß nicht, in welchem Verzeichnis die Programme docker-compose und chromium liegen.
Danke für die Antwort. Ich hab die absoluten Pfade ergänzt, allerdings ist das mit /usr/local/bin/docker-compose up -d schwierig, weil docker die entsprechenden Dateien erwartet (Ich bin mit der Terminal nicht so wirklich vertraut).

RaainER
Beiträge: 8
Registriert: 04.05.2021 11:57:36

Re: Systemd Service läuft nicht durch

Beitrag von RaainER » 04.05.2021 16:34:58

Ansonsten: Was möchtest du denn erreichen? Wo soll der Chromium überhaupt laufen/zu sehen sein? Aus einem Service kann man nicht mal so eben eine grafische Anwendung starten.
Mit Docker sollen Container gestartet werden, der Inhalt (Datenbank-App) soll dann in Chromium angezeigt werden. Wie gesagt wenn ich das Script manuell ausführe klappt das wunderbar. Wenn das mit systemd nicht so gut läuft, würde ich das auch gerne über einen Cronjob machen - wahrscheinlich mit absuten Pfaden - allerdings wäre dann wieder das Problem mit den Dateien für Docker.

RaainER
Beiträge: 8
Registriert: 04.05.2021 11:57:36

Re: Systemd Service läuft nicht durch

Beitrag von RaainER » 04.05.2021 16:57:03

mat6937 hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 14:00:22
RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 12:34:34

Code: Alles auswählen

[Unit]
Description=Wird ausgeführt bei boot

[Service]
Manuel im Terminal kann ich das Skript ohne Probleme ausführen.
Evtl. mal mit folgenden Abhängigkeiten in der [Unit]-Section testen:

Code: Alles auswählen

After=sys-subsystem-net-devices-eth0.device
Requires=time-sync.target
After=time-sync.target
Requires=systemd-time-wait-sync.service
After=systemd-time-wait-sync.service
(das eth0-Interface musst Du evtl. anpassen).

Oder Du startest die deaktivierte service-unit, mit einer timer-unit, z. B. 30 Sekunden nach dem Booten.
Leider hab ich die Internet-Schnittstelle nicht rausfinden können - "ip addr" ergab nichts was ich irgendwie sinnvoll interpretieren konnte. Allerdings hat ExecStartPre=/bin/sleep 30 die Ausführung des Skripts verzögert - aber mit selbem Ergebnis.

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

Re: Systemd Service läuft nicht durch

Beitrag von mat6937 » 04.05.2021 16:59:13

RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 16:34:58
Wie gesagt wenn ich das Script manuell ausführe klappt das wunderbar. Wenn das mit systemd nicht so gut läuft, ...
Wenn es manuell klappt, dann läuft das i. d. R. auch mit einer timer-unit (systemd), ... und das besser als mit einem cronjob (@reboot), sofort nach dem booten.

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

Re: Systemd Service läuft nicht durch

Beitrag von mat6937 » 04.05.2021 17:01:22

RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 16:57:03
Leider hab ich die Internet-Schnittstelle nicht rausfinden können - "ip addr" ergab nichts was ich irgendwie sinnvoll interpretieren konnte.
Die Zeile:

Code: Alles auswählen

After=sys-subsystem-net-devices-eth0.device
kannst Du auch weglassen. denn die ist nicht zwingend erforderlich.
Nur so aus Neugier, wie ist die Ausgabe von:

Code: Alles auswählen

ip a
?

RaainER
Beiträge: 8
Registriert: 04.05.2021 11:57:36

Re: Systemd Service läuft nicht durch

Beitrag von RaainER » 04.05.2021 17:21:03

Nur so aus Neugier, wie ist die Ausgabe von: ip a

Code: Alles auswählen

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:99:32:1b brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 86203sec preferred_lft 86203sec
    inet6 fe80::a00:27ff:fe99:321b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: br-2bda7a6f7bfa: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:cb:c1:79:19 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-2bda7a6f7bfa
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:6b:62:50:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

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

Re: Systemd Service läuft nicht durch

Beitrag von mat6937 » 04.05.2021 17:34:15

RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 17:21:03

Code: Alles auswählen

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:99:32:1b brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 86203sec preferred_lft 86203sec
    inet6 fe80::a00:27ff:fe99:321b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
Wie ist jetzt die Ausgabe von:

Code: Alles auswählen

systemctl status sys-subsystem-net-devices-enp0s3.device
?

Benutzeravatar
jph
Beiträge: 1049
Registriert: 06.12.2015 15:06:07
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Greven/Westf.

Re: Systemd Service läuft nicht durch

Beitrag von jph » 04.05.2021 17:39:29

RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 12:34:34
VM mit aktuellem debian / Kde. In /etc/systemd/system/boot.service einen Service erstellt (und enabled) mit:

Code: Alles auswählen

[Unit]
Description=Wird ausgeführt bei boot

[Service]
User=user11
Type=simple
ExecStart=/usr/bin/boot.sh

[Install]
WantedBy=multi-user.target
Wieso nimmst du nicht einen systemd-User-Service?

Möglicherweise wird dein Service auch nicht gestartet bzw. sofort wieder beendet, weil die Prozesse von user11 nicht herumlungern dürfen, wenn dieser nicht eingeloggt ist.

Code: Alles auswählen

# loginctl enable-linger user11
Zuletzt geändert von jph am 04.05.2021 18:09:23, insgesamt 1-mal geändert.

RaainER
Beiträge: 8
Registriert: 04.05.2021 11:57:36

Re: Systemd Service läuft nicht durch

Beitrag von RaainER » 04.05.2021 17:46:34

[/quote]
Wie ist jetzt die Ausgabe von:

Code: Alles auswählen

systemctl status sys-subsystem-net-devices-enp0s3.device
?
[/quote]

Danke :) läuft

Code: Alles auswählen

sys-subsystem-net-devices-enp0s3.device - 82540EM Gigabit Ethernet Controller (PRO/1000 MT
   Loaded: loaded
   Active: active (plugged) since Tue 2021-05-04 17:38:04 CEST; 5min ago
   Device: /sys/devices/pci0000:00/0000:00:03.0/net/enp0s3

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

Re: Systemd Service läuft nicht durch

Beitrag von mat6937 » 04.05.2021 17:53:21

RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 17:46:34

Code: Alles auswählen

sys-subsystem-net-devices-enp0s3.device - 82540EM Gigabit Ethernet Controller (PRO/1000 MT
   Loaded: loaded
   Active: active (plugged) since Tue 2021-05-04 17:38:04 CEST; 5min ago
   Device: /sys/devices/pci0000:00/0000:00:03.0/net/enp0s3
OK, dann kannst Du die Zeile:

Code: Alles auswählen

After=sys-subsystem-net-devices-enp0s3.device
in der [Unit]-Section einer service-unit benutzen, falls das erforderlich ist (... weil z. B. von der NIC abhängig).

RaainER
Beiträge: 8
Registriert: 04.05.2021 11:57:36

Re: Systemd Service läuft nicht durch

Beitrag von RaainER » 04.05.2021 18:10:37

Neuer Status:

Code: Alles auswählen

[Unit]
Description=Wird ausgeführt bei boot
After=sys-subsystem-net-devices-enp0s3.devices
Requires=time-sync.target
After=time-sync.target
Requires=systemd-time-wait-sync.service
After=systemd-time-wait-sync.service

[Service]
ExecStartPre=sleep 30
User=user11
Type=simple
ExecStart=/usr/bin/boot.sh

[Install]
WantedBy=multi-user.target

Code: Alles auswählen

#!/bin/bash
touch /home/user11/system_l.txt &&
cd /home/user11/vitoop &&
docker-compose up -d &&
chromium --start-fullscreen http://localhost:8080
Docker bzw, die Container laufen .. nur der Browser funktioniert noch nicht. Gibt es einen Trick um ein grafisches Programm im Service zu starten?

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

Re: Systemd Service läuft nicht durch

Beitrag von mat6937 » 04.05.2021 18:23:17

RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 18:10:37

Docker bzw, die Container laufen .. nur der Browser funktioniert noch nicht. Gibt es einen Trick um ein grafisches Programm im Service zu starten?
Versuch mal in der [Service]-Section mit der zusätzlichen Zeile:

Code: Alles auswählen

Environment=DISPLAY=:0
und wenn das nicht geht für den user11, dann ohne diese Zeile und in der [Unit]-Section mit der Zeile:

Code: Alles auswählen

PartOf=graphical-session.target
und in der [Install]-Section mit der Zeile:

Code: Alles auswählen

WantedBy=graphical-session.target
Aber vor dieser Änderung, schauen ob und wie der Zustand dieser target-unit ist:

Code: Alles auswählen

systemctl status graphical-session.target

RaainER
Beiträge: 8
Registriert: 04.05.2021 11:57:36

Re: Systemd Service läuft nicht durch

Beitrag von RaainER » 04.05.2021 20:15:51

mat6937 hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 18:23:17
RaainER hat geschrieben: ↑ zum Beitrag ↑
04.05.2021 18:10:37


Versuch mal in der [Service]-Section mit der zusätzlichen Zeile:

Code: Alles auswählen

Environment=DISPLAY=:0
Das hat funktioniert! Die VM startet und führt das Skript bis zum Ende aus :D

Vielen Dank an Alle !!!

Antworten