diff --git a/devices/gl-ar750/default.nix b/devices/gl-ar750/default.nix index 94d34e4a..79a6c309 100644 --- a/devices/gl-ar750/default.nix +++ b/devices/gl-ar750/default.nix @@ -75,7 +75,6 @@ dd if=/dev/$part of=data iflag=skip_bytes,fullblock bs=${toString size} skip=${toString offset} count=1 ) ''; - down = "true"; }; inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.liminix.networking) interface; diff --git a/examples/arhcive.nix b/examples/arhcive.nix index 506b8bb8..8e19594f 100644 --- a/examples/arhcive.nix +++ b/examples/arhcive.nix @@ -84,9 +84,6 @@ in rec { done ) ''; - down = '' - rm -rf /run/service-state/${name}/ - ''; }; filesystem = dir { etc = dir { diff --git a/examples/extneder.nix b/examples/extneder.nix index 0e557ad2..28697bd2 100644 --- a/examples/extneder.nix +++ b/examples/extneder.nix @@ -119,9 +119,6 @@ in rec { done ) ''; - down = '' - rm -rf /run/service-state/${name}/ - ''; }; filesystem = dir { etc = dir { diff --git a/examples/rotuer.nix b/examples/rotuer.nix index 4a677b03..495a5904 100644 --- a/examples/rotuer.nix +++ b/examples/rotuer.nix @@ -131,9 +131,6 @@ in rec { chmod 0444 resolv.conf ) ''; - down = '' - rm -rf /run/service-state/${name}/ - ''; }; filesystem = diff --git a/pkgs/liminix-tools/services/default.nix b/pkgs/liminix-tools/services/default.nix index 138e77e0..60f4e9db 100644 --- a/pkgs/liminix-tools/services/default.nix +++ b/pkgs/liminix-tools/services/default.nix @@ -9,13 +9,18 @@ }: let inherit (builtins) concatStringsSep; - output = service: name: "/run/service-state/${service.name}/${name}"; + prefix = "/run/service-state"; + output = service: name: "${prefix}/${service.name}/${name}"; serviceScript = commands : '' #!/bin/sh exec 2>&1 . ${serviceFns} ${commands} ''; + cleanupScript = name : '' + #!/bin/sh + test -d ${prefix}/${name} && rm -rf ${prefix}/${name} + ''; service = { name , serviceType @@ -61,21 +66,23 @@ let in service (args // { buildInputs = [ logger ]; serviceType = "longrun"; - run = serviceScript run; + run = serviceScript "${run}\n${cleanupScript name}"; producer-for = "${name}-log"; }); oneshot = { name , up - , down + , down ? "" , outputs ? [] , dependencies ? [] , ... } @ args : service (args // { serviceType = "oneshot"; up = writeScript "${name}-up" (serviceScript up); - down= writeScript "${name}-down" (serviceScript down); + down = writeScript + "${name}-down" + "${serviceScript down}\n${cleanupScript name}"; }); bundle = { name