Ich meine, eine funktionierende Konfiguration gefunden zu haben. Mittels
systemctl edit --full httpd.service
habe ich eine volle Kopie -- nicht ein Dropin -- des Service Files erstellt und darin folgendes angepasst:
- Type=simple in Type=forking geändert.
- An allen drei Stellen /usr/bin/httpd durch /usr/bin/apachectl ersetzt.
- In der Zeile ExecStart den Parameter -DFOREGROUND entfernt.
Der Ausschnitt sieht als folgendermassen aus:
[Service]
Type=forking
ExecStart=/usr/bin/apachectl start
ExecStop=/usr/bin/apachectl graceful-stop
ExecReload=/usr/bin/apachectl graceful
Der Parameter
-DFOREGROUND sagt dem
httpd, beim Startup keinen fork() zu machen, wie das Daemon Prozesse normalerweise tun. Im Standard
httpd.service sagt
Type=simple, dass der gestartete Prozess eben genau dies nicht tut, also der vom
systemd gestartete Prozess am Laufen bleibt. Pass soweit.
Mit dem Start Skript
apachectl will man dieses Verhalten nicht, denn sonst bleibt das Skript "hängen", bis der
httpd Prozess endet. Also ohne
-DFOREGROUND. So gestartet macht der
httpd gleich zu Beginn einen fork(), der Parent Prozess endet und gibt die Kontrolle zurück an den
apachectl, der seinerseits endet. Der Child vom initialen
httpd bleibt dann als Hauptprozess am Laufen.
Mit dieser Einstellung funktioniert ein Starten und Stoppen vom
httpd über
systemctl soweit ohne Probleme.
Allerdings habe das nur in meiner Testumgebung gemacht und da benutze ich den httpd nicht wirklich.
Bleibt also noch
umask 002
im File
/usr/bin/envvars einzutragen
und sich irgendwo eine Notiz zu machen, letzteres nach Updates jeweils zu überprüfen :-)
Gruss
Peter