Skript beim Start ausführen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mod3

Skript beim Start ausführen

Beitrag von mod3 » 12.04.2017 11:19:02

Hallo,

ich weiß, dass es einige Google-Einträge zu dem Thema gibt, ein Skript beim Start des Systems ausführen zu lassen.
Mein Problem: Das scheint mir alles sehr umständlich und kompliziert. Ich möchte eigentlich nichts weiter als z.B. mein Firewall-Skript und meine openVPN-Verbindungen beim Systemstart ausführen.
Gibt es dafür eine einfachere Möglichkeit? Früher genügte es, Verknüpfungen in den passenden Runleveln anzulegen...

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

Re: Skript beim Start ausführen

Beitrag von MSfree » 12.04.2017 11:44:25

mod3 hat geschrieben:Mein Problem: Das scheint mir alles sehr umständlich und kompliziert. Ich möchte eigentlich nichts weiter als z.B. mein Firewall-Skript und meine openVPN-Verbindungen beim Systemstart ausführen.
Bei der Installation von OpenVPN wird bereits eine Starunit für systemd angelegt, die allerdings zunächst nicht aktiviert ist.

Zum aktivieren muß man nur systemctl enable openvpn.service aufrufen, und Openvpn startet automatisch beim nächsten Boot. Ausserdem gibt es unter /etc/default noch eine Steuerdatei für OpenVPN, in die eingetragen werden kann/muß, welche VPNs gestartet werden sollen.

Für dein Firewallskript kannst du dir eine eigene Systemunit bauen, die dann von systemd aufgerufen wird. Die Startunit gehören in das Verzeichnis /lib/systemd/system und so eine Unit könnte folgendermassen aussehen:

lege eine neue Datei /lib/systemd/system/firewall.service mit folgendem Inhalt an:

Code: Alles auswählen

[Unit]
Description=Firewall
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/pfad/zu/deinen/Firewall.skript start
ExecStop=/pfad/zu/deinen/Firewall.skript stop

[Install]
WantedBy=multi-user.target
Danach noch ein systemctl enable firewall.service und los geht's.

Alternativ kannst du dein Firewallskript auch über die Hooks in /etc/network/if-up.d staten lassen.

DeletedUserReAsG

Re: Skript beim Start ausführen

Beitrag von DeletedUserReAsG » 12.04.2017 12:40:05

Sollten eigene Units nicht unter /etc statt /lib landen?

TomL

Re: Skript beim Start ausführen

Beitrag von TomL » 12.04.2017 12:55:18

niemand hat geschrieben:Sollten eigene Units nicht unter /etc statt /lib landen?
Ja.

mod3

Re: Skript beim Start ausführen

Beitrag von mod3 » 13.04.2017 14:38:57

Super, vielen Dank schonmal für den Tipp mit openVPN!
Dann nutze ich also die obige Anleitung, schreibe die Dateien aber nach /etc/, statt nach /lib?

TomL

Re: Skript beim Start ausführen

Beitrag von TomL » 14.04.2017 14:24:25

mod3 hat geschrieben:Super, vielen Dank schonmal für den Tipp mit openVPN!
Dann nutze ich also die obige Anleitung, schreibe die Dateien aber nach /etc/, statt nach /lib?
Bei der Installation von OpenVPN wird haufenweise Zeugs installiert, was man eigentlich nicht benötigt. Letzten Endes braucht es nur das Binary und Deine Confs. Ich würde also darauf verzichten, OpenVPN mit dem alten /etc/init.d/script zu starten und stattdessen einfach eine explizite Unit erstellen, die den OpenVPN-Server bei Systemstart startet.

Code: Alles auswählen

nano /etc/systemd/system/openvpn-server-udp-1194.service

Code: Alles auswählen

[Unit]
Description=thlu:openvpn.service   OpenVPN Server UDP/1194
After=network.target

[Service]
Type=forking
PIDFile=/var/run/openvpn/server_udp_1194.pid
ExecStartPre=/bin/mkdir -p /var/run/openvpn
ExecStart=/usr/local/sbin/openvpn --daemon --writepid /var/run/openvpn/server_udp_1194.pid --status /var/run/openvpn/server_udp_1194.status 60 --cd /etc/openvpn/ --config /etc/openvpn/server_udp_1194.conf
KillMode=process

[Install]
WantedBy=multi-user.target
Meine IpTables starte ich mit dieser Unit:

Code: Alles auswählen

nano /etc/systemd/system/set-iptables.service

Code: Alles auswählen

[Unit]
Description=thlu:set-iptables.service:   Set local iptables
DefaultDependencies=no
After=basic.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set-c-ip4tables start
ExecStart=/usr/local/bin/set-c-ip6tables start

[Install]
WantedBy=multi-user.target
Wie Du siehst, liegen meine IPTables-Scripte in /usr/local/bin. Das "C" im Namen steht für Client, dementsprechend gibts auch 1 Paar mit "S" für den Server.

Antworten