2017-06-09 1 views
1

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?

Antwort

0

Was über das Hinzufügen von:

ExecStartPre=-/bin/mkdir /etc/ldap/slapd.d 

?

+0

'mkdir -p' vielleicht, so dass es nicht fehlschlägt, wenn das Verzeichnis existiert ... Oder vielleicht führt das' -' die gleiche Sache, denke ich ... – twalberg

+0

@twalberg 'man systemd.service' bestätigt dass der führende Bindestrich "systemd" anweist, den möglichen Fehler des Befehls zu ignorieren. –

+0

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. –

Verwandte Themen