Ich versuche eine Servicedatei für OpenLDAP zu schreiben. Was ich so weit gekommen ist:Wie variiert man Startparameter in Systemd Service basierend auf Datei Existenz?
[Unit]
Description=OpenLDAP server daemon
After=network.target
[Service]
Type=forking
PIDFile=/var/run/slapd/slapd.pid
ExecStartPre=-/bin/mkdir /var/run/slapd
ExecStartPre=/bin/chown openldap:openldap /var/run/slapd
ExecStart=/srv/openldap-latest/lib/slapd -h "ldap:/// ldaps:/// ldapi:///" -u openldap -g openldap -F /etc/ldap/slapd.d
[Install]
WantedBy=multi-user.target
Das Problem der "-F /etc/ldap/slapd.d" Bit ist. Wenn OpenLDAP zum ersten Mal eingerichtet wird, existiert dieses Verzeichnis nicht, Sie müssen stattdessen "-f /etc/ldap/slapd.conf" angeben. Ich kann jedoch nicht sehen, wie dies mit Systemd zu tun ist.
Eine Option könnte sein, ZWEI verschiedene Einheiten zu definieren - eine startet, wenn slapd.d existiert und eine startet, wenn slapd.d nicht existiert - aber der Dienst muss immer noch das selbe sein, was Administratoren sonst bekommen sehr verwirrt, also glaube ich nicht, dass diese Idee funktioniert.
Wie kann ich das lösen?
'mkdir -p' vielleicht, so dass es nicht fehlschlägt, wenn das Verzeichnis existiert ... Oder vielleicht führt das' -' die gleiche Sache, denke ich ... – twalberg
@twalberg 'man systemd.service' bestätigt dass der führende Bindestrich "systemd" anweist, den möglichen Fehler des Befehls zu ignorieren. –
Während ich den Vorschlag schätze, benötigt OpenLDAP leider etwas in diesem Verzeichnis. Ich muss zunächst OpenLDAP mit einer Konfigurationsdatei ausführen, dann die Datei in das Verzeichnis + contents konvertieren und OpenLDAP damit ausführen. –