From: Ismaƫl Bouya Date: Wed, 22 Apr 2020 20:48:13 +0000 (+0200) Subject: Reload httpd service instead of restarting it X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FConfig%2FNix%2FNUR.git;a=commitdiff_plain;h=694a90f7b6eb4dd09004c7358ca8e25fe6b08b87 Reload httpd service instead of restarting it --- diff --git a/modules/websites/default.nix b/modules/websites/default.nix index d5a0f635..837d838b 100644 --- a/modules/websites/default.nix +++ b/modules/websites/default.nix @@ -1,4 +1,4 @@ -{ lib, config, ... }: with lib; +{ lib, config, pkgs, ... }: with lib; let cfg = config.services.websites; in @@ -274,4 +274,42 @@ in (name: path: "ln -s ${path} $out/${cfg.webappDirsName}/${name}") cfg.webappDirs) } ''; + + config.systemd.services = let + package = httpdName: config.services.httpd.${httpdName}.package.out; + cfgFile = httpdName: config.services.httpd.${httpdName}.configFile; + serviceChange = attrsets.mapAttrs' (name: icfg: + attrsets.nameValuePair + "httpd${icfg.httpdName}" { + stopIfChanged = false; + serviceConfig.ExecStart = + lib.mkForce "@${package icfg.httpdName}/bin/httpd httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf"; + serviceConfig.ExecStop = + lib.mkForce "${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -k graceful-stop"; + serviceConfig.ExecReload = + lib.mkForce "${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -k graceful"; + } + ) cfg.env; + serviceReload = attrsets.mapAttrs' (name: icfg: + attrsets.nameValuePair + "httpd${icfg.httpdName}-config-reload" { + wants = [ "httpd${icfg.httpdName}.service" ]; + wantedBy = [ "multi-user.target" ]; + restartTriggers = [ (cfgFile icfg.httpdName) ]; + # commented, because can cause extra delays during activate for this config: + # services.nginx.virtualHosts."_".locations."/".proxyPass = "http://blabla:3000"; + # stopIfChanged = false; + serviceConfig.Type = "oneshot"; + serviceConfig.TimeoutSec = 60; + script = '' + if ${pkgs.systemd}/bin/systemctl -q is-active httpd${icfg.httpdName}.service ; then + ${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -t && \ + ${pkgs.systemd}/bin/systemctl reload httpd${icfg.httpdName}.service + fi + ''; + serviceConfig.RemainAfterExit = true; + } + ) cfg.env; + in + serviceChange // serviceReload; }