Fryboyter

Alias für Services unter systemd

Manche Services unter systemd haben ziemlich umständliche Bezeichnungen. Systemd-networkd.service oder openvpn@vpn.service zum Beispiel. Um es sich beim Aktivieren, Deaktivieren oder Neustarten etwas einfacher zu machen, kann man hier zu einem Alias greifen. Nehmen wir mal openvpn@vpn.service als Beispiel.

Hier öffnet man einfach die Datei openvpn@vpn.service welche unter /etc/systemd/systemd/multi-user.target.wants/ liegt. Diese sollte wie folgt aussehen.

[Unit]
Description=OpenVPN connection to %i 

[Service]
Type=forking
ExecStart=/usr/bin/openvpn --cd /etc/openvpn --config /etc/openvpn/%i.conf --da$ 
PIDFile=/run/openvpn@%i.pid 

[Install]
WantedBy=multi-user.target

Soll der Service auf den Alias vpn1 reagieren, muss man einfach unter [Install] Alias=vpn1.service hinzufügen. Wichtig ist hier, dass der Alias die gleiche Endung hat wie das Original. Also in dem Fall .service. Hier kann man auch mehrere Aliase angeben, welche man in die gleiche Zeile mit einem Lehrschritt getrennt eingibt.

Hat man die Datei nun entsprechend geändert und abgespeichert aktiviert man den Service mittels systemctl enable openvpn@vpn.service. Hiermit wird nun ein Symlink vpn1.service angelegt, welcher auf openvpn@vpn.service verweist. Von nun an kann dieser “Service” anstelle des Originals genutzt werden. Also beispielsweise systemctl status vpn1.service.

Linux | OSBN

Gesprächigkeit eines systemd-Service einstellen

Vor ca. zwei Wochen habe ich für ngb.to einen Quake-3-Arena-Server auf Basis von ioquake aufgesetzt. Als Distribution habe ich Arch Linux gewählt. Nachdem alles installiert war, wollte ich den Q3A-Server nach dem Booten und nach einem eventuellen Absturz, neu starten lassen. Mittels eines systemd-Service kein Problem. Nur ist Q3A an sich eine Quasselstrippe und müllt die Logdateien gnadenlos zu. Vor allem, wenn gezockt wird. Hier bin ich mir nicht sicher wie lange das mit der, im Raspberry Pi verbauten, Speicherkarte gut geht. Daher musste ein Weg her, um Q3A zum Schweigen zu bringen.

Nach einer kurzen Suche in der Dokumentation von systemd wurde ich fündig. Hier hilft StandardOutput= weiter. Hierüber kann man die Standardausgabe eines Service definieren. Zur Auswahl stehen inherit, null, tty, journal, syslog, kmsg, journal+console, syslog+console, kmsg+console sowie socket. Da mich die Standardausgabe (X has joined usw.) nun wirklich nicht interessiert, war ich gnadenlos und habe null gewählt. Somit werden die ganzen Ausgaben direkt gemülleimert und das Journal und somit auch die Speicherkarte werden geschont. Herausgekommen ist dann folgender Service.

[Unit]
Description=Startet ioquake3-Server

[Service]
User=q3a
ExecStart=/pfad/zum/Startscript/q3a.sh
StandardOutput=null
Restart=always

[Install]
WantedBy=multi-user.target

Wenn man will, kann man auch noch StandardError= für eventuell auftretende Fehler definieren. Hier gelten wieder oben genannte Möglichkeiten. Gibt man dies nicht direkt in der Service-Datei an, wird der Standard inherit verwendet.

Linux | OSBN