Run the garbage collector as a systemd service
Running it from systemd rather than cron has several advantages: systemd ensures that only one instance runs at a time; the GC can be manually started/stopped; and logging goes to the journal. We still need cron to start the service at the right time, but hopefully soon we can get rid of cron entirely (once systemd supports starting a unit at a specific time).
This commit is contained in:
parent
f701acfac0
commit
baac242a1f
@ -16,7 +16,7 @@ in
|
||||
|
||||
automatic = mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
type = types.bool;
|
||||
description = "
|
||||
Automatically run the garbage collector at specified dates.
|
||||
";
|
||||
@ -24,6 +24,7 @@ in
|
||||
|
||||
dates = mkOption {
|
||||
default = "15 03 * * *";
|
||||
type = types.string;
|
||||
description = "
|
||||
Run the garbage collector at specified dates to avoid full
|
||||
hard-drives.
|
||||
@ -33,6 +34,7 @@ in
|
||||
options = mkOption {
|
||||
default = "";
|
||||
example = "--max-freed $((64 * 1024**3))";
|
||||
type = types.string;
|
||||
description = "
|
||||
Options given to <filename>nix-collect-garbage</filename> when the
|
||||
garbage collector is run automatically.
|
||||
@ -45,10 +47,17 @@ in
|
||||
|
||||
###### implementation
|
||||
|
||||
config = mkIf cfg.automatic {
|
||||
services.cron.systemCronJobs = [
|
||||
"${cfg.dates} root ${nix}/bin/nix-collect-garbage ${cfg.options} > /var/log/gc.log 2>&1"
|
||||
];
|
||||
config = {
|
||||
|
||||
services.cron.systemCronJobs = mkIf cfg.automatic (singleton
|
||||
"${cfg.dates} root ${config.system.build.systemd}/bin/systemctl start nix-gc.service");
|
||||
|
||||
boot.systemd.services."nix-gc" =
|
||||
{ description = "Nix Garbage Collector";
|
||||
serviceConfig.ExecStart =
|
||||
"@${nix}/bin/nix-collect-garbage nix-collect-garbage ${cfg.options}";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user