Unverified Commit 50d5306e authored by Maximilian Bosch's avatar Maximilian Bosch
Browse files

nixos/nextcloud: use dedicated memory limit for the entire CLI

Originally, I wanted to execute `nextcloud-occ` with a higher memory
limit because I needed to trigger an expensive operation by hand,
regenerating a bunch of previews.

While doing so, I realized how painful it is to put an invocation of
nextcloud-occ together for that, especially when you need to put it
into another systemd unit in Nix code.

That's why I decided to use the memory limit now for every
CLI invocation just in case. The stuff you do in those units (e.g.
running background jobs) is something you can also do by hand with
`nextcloud-occ` and you'll most likely want to have the same memory
limit there.
parent ab9b8f8c
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -80,6 +80,12 @@ let
    mkKeyValue = generators.mkKeyValueDefault {} " = ";
  };

  phpCli = concatStringsSep " " ([
    "${getExe phpPackage}"
  ] ++ optionals (cfg.cli.memoryLimit != null) [
    "-dmemory_limit=${cfg.cli.memoryLimit}"
  ]);

  occ = pkgs.writeScriptBin "nextcloud-occ" ''
    #! ${pkgs.runtimeShell}
    cd ${webroot}
@@ -89,7 +95,7 @@ let
    fi
    export NEXTCLOUD_CONFIG_DIR="${datadir}/config"
    $sudo \
      ${phpPackage}/bin/php \
      ${phpCli} \
      occ "$@"
  '';

@@ -196,6 +202,9 @@ let
in {

  imports = [
    (mkRenamedOptionModule
      [ "services" "nextcloud" "cron" "memoryLimit" ]
      [ "services" "nextcloud" "cli" "memoryLimit" ])
    (mkRemovedOptionModule [ "services" "nextcloud" "enableBrokenCiphersForSSE" ] ''
      This option has no effect since there's no supported Nextcloud version packaged here
      using OpenSSL for RC4 SSE.
@@ -793,7 +802,7 @@ in {
      };
    };

    cron.memoryLimit = mkOption {
    cli.memoryLimit = mkOption {
      type = types.nullOr types.str;
      default = null;
      example = "1G";
@@ -1009,14 +1018,8 @@ in {
          serviceConfig = {
            Type = "exec";
            User = "nextcloud";
            ExecCondition = "${lib.getExe phpPackage} -f ${webroot}/occ status -e";
            ExecStart = lib.concatStringsSep " " ([
              (lib.getExe phpPackage)
            ] ++ optional (cfg.cron.memoryLimit != null) "-dmemory_limit=${cfg.cron.memoryLimit}"
              ++ [
              "-f"
              "${webroot}/cron.php"
            ]);
            ExecCondition = "${phpCli} -f ${webroot}/occ status -e";
            ExecStart = "${phpCli} -f ${webroot}/cron.php";
            KillMode = "process";
          };
        };
@@ -1040,7 +1043,7 @@ in {
          serviceConfig = {
            Type = "exec";
            User = "nextcloud";
            ExecCondition = "${lib.getExe phpPackage} -f ${webroot}/occ status -e";
            ExecCondition = "${phpCli} -f ${webroot}/occ status -e";
          };
        };
      };