From 694a90f7b6eb4dd09004c7358ca8e25fe6b08b87 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Wed, 22 Apr 2020 22:48:13 +0200 Subject: [PATCH] Reload httpd service instead of restarting it --- modules/websites/default.nix | 40 +++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) 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; } -- 2.41.0