systemd-timer - script verhält sich anders als manuell

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
grefabu
Beiträge: 24
Registriert: 25.10.2006 15:42:33

systemd-timer - script verhält sich anders als manuell

Beitrag von grefabu » 12.07.2024 05:10:28

Moin,

wegen eines dsl lite Anschlusses habe ich ein einfaches script für ipv6tunnel:

Code: Alles auswählen

#!/bin/bash
#
baikonur=$(</root/baikonurIpv6)
collabora=$(</root/collaboraIpv6)

echo "baikonur: $baikonur"
echo "collabora: $collabora"

killall 6tunnel

sleep 3s

6tunnel 80 $baikonur 80

sleep 3s

6tunnel 443 $baikonur 443

sleep 3s

6tunnel 2222 $baikonur 22

#sleep 3s

#6tunnel 9980 $collabora 9980
Führe ich das script manuell aus, funktioniert auch alles, der Tunnel wird aufgebaut und läuft.
Versuche ich das script über einen systemd timer auszuführen, werden die Tunnel kurz aufgebaut, aber nach durchlaufen des scipts wieder beendet.

Code: Alles auswählen

root@localhost:~# cat /etc/systemd/system/ipv6tunnel.timer 
[Unit]
Description=Ausfuehren des IPv6 Tunnel Scripts

[Timer]
OnCalendar=21:24:00
Unit=ipv6tunnel.service

[Install]
WantedBy=multi-user.target

Code: Alles auswählen

root@localhost:~# cat /etc/systemd/system/ipv6tunnel.service 
[Unit]
Description=Ausfuehren Script ipv6tunnel

[Service]
Type=oneshot
ExecStart=/bin/bash /root/ipv6tunnel.sh
TimeoutSec=30
User=root
Wo liegt an dieser Stelle der Unterschied im Verhalten? Wie könnte ich das Problem lösen?

Danke für jede Hilfe

Gregor

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

Re: systemd-timer - script verhält sich anders als manuell

Beitrag von mat6937 » 12.07.2024 09:41:10

grefabu hat geschrieben: ↑ zum Beitrag ↑
12.07.2024 05:10:28

Code: Alles auswählen

root@localhost:~# cat /etc/systemd/system/ipv6tunnel.timer 
[Unit]
Description=Ausfuehren des IPv6 Tunnel Scripts

[Timer]
OnCalendar=21:24:00
Unit=ipv6tunnel.service

[Install]
WantedBy=multi-user.target

Code: Alles auswählen

root@localhost:~# cat /etc/systemd/system/ipv6tunnel.service 
[Unit]
Description=Ausfuehren Script ipv6tunnel

[Service]
Type=oneshot
ExecStart=/bin/bash /root/ipv6tunnel.sh
TimeoutSec=30
User=root
Versuch mal mit:

Code: Alles auswählen

OnCalendar=*-*-* 21:24:00      # statt OnCalendar=21:24:00
Persistent=true
und mit:
WantedBy=timers.target # statt WantedBy=multi-user.target
Die Zeile mit "unit=ipv6tunnel.service" ist nicht zwngend erforderlich wenn der Name identisch ist (was bei dir der Fall ist).

In der service-unit, ohne die Zeile "User=root" und mit den Zeilen:

Code: Alles auswählen

RemainAfterExit=yes

Code: Alles auswählen

[Install]
WantedBy=multi-user.target
an den richtigen Stellen. Die service-unit soll nicht aktiviert (enabled) sein, wenn sie via timer-unit ausgeführt wird. Evtl. im Script auch absolute Pfade benutzen.
Debian 12.9 mit LXDE, OpenBSD 7.6 mit i3wm, FreeBSD 14.1 mit Xfce

grefabu
Beiträge: 24
Registriert: 25.10.2006 15:42:33

Re: systemd-timer - script verhält sich anders als manuell

Beitrag von grefabu » 13.07.2024 08:41:21

Moin,

danke für Deine Antwort.
Ich denke, wenn man den service nicht aktivieren möchte ist das

Code: Alles auswählen

{Install]
nicht zwingend notwendig.

Das Persistent führte dann tatsächlich dazu, das die tunnel aktiv bleiben.
Aber diese wurden dann bei einem erneuten Ausführen des timers nicht durch das killall getötet?
Ich muss das noch mal in ruhe durch probieren.

Allerdings habe ich es jetzt doch mit einem cronjob gelöst, da funktioniert es mit einer Zeile direkt ;-)
Da ich aber mir in den Kopf gesetzt habe, es mit systemd zu lösen mache ich später (hoffentlich) weiter.

Grüße

Gregor

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

Re: systemd-timer - script verhält sich anders als manuell

Beitrag von mat6937 » 13.07.2024 08:52:53

grefabu hat geschrieben: ↑ zum Beitrag ↑
13.07.2024 08:41:21
Aber diese wurden dann bei einem erneuten Ausführen des timers nicht durch das killall getötet?
Versuch mal in der (deaktivierten) service-unit, mit der zusätzlichen Zeile (in deren [Unit]-Section):

Code: Alles auswählen

ExecStartPre=/usr/bin/killall 6tunnel
Zum testen kannst Du dann (als root) die deaktivierte service-unit, manuell restarten/ausführen:

Code: Alles auswählen

systemctl restart ipv6tunnel
um zu schauen ob der Tunnel getötet wird. Wenn das der Fall ist, sollte es auch bei ausführung via timer-unit der Fall sein.
Debian 12.9 mit LXDE, OpenBSD 7.6 mit i3wm, FreeBSD 14.1 mit Xfce

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

Re: systemd-timer - script verhält sich anders als manuell

Beitrag von mat6937 » 14.07.2024 08:48:25

grefabu hat geschrieben: ↑ zum Beitrag ↑
13.07.2024 08:41:21
Aber diese wurden dann bei einem erneuten Ausführen des timers nicht durch das killall getötet?
Ich muss das noch mal in ruhe durch probieren.
Was Du noch probieren kannst, um zu sehen ob das killall persistent wirkt, ist die Benutzung der Zeilen:

Code: Alles auswählen

KillMode=mixed
RestartPreventExitStatus=0 SIGTERM SIGPIPE SIGSTOP
in der [Service]-Section deiner service-unit (ipv6tunnel.service).
Debian 12.9 mit LXDE, OpenBSD 7.6 mit i3wm, FreeBSD 14.1 mit Xfce

Antworten