unison: better retry/restart reporting failures
The service was never marked with a failed state with the previous approach, which could lead broken synchronisation pair states to go undetected. The module now uses a timer instead of unlimited restarts, which does not have this issue.
This commit is contained in:
parent
7184dfe663
commit
de9134144b
|
@ -65,9 +65,10 @@ let
|
|||
|
||||
serialiseArgs = args: concatStringsSep " " (mapAttrsToList serialiseArg args);
|
||||
|
||||
unitName = name: "unison-pair-${name}";
|
||||
|
||||
makeDefs = gen:
|
||||
mapAttrs'
|
||||
(name: pairCfg: nameValuePair "unison-pair-${name}" (gen name pairCfg))
|
||||
mapAttrs' (name: pairCfg: nameValuePair (unitName name) (gen name pairCfg))
|
||||
cfg.pairs;
|
||||
|
||||
in {
|
||||
|
@ -106,19 +107,10 @@ in {
|
|||
];
|
||||
|
||||
systemd.user.services = makeDefs (name: pairCfg: {
|
||||
Unit = {
|
||||
Description = "Unison pair sync (${name})";
|
||||
# Retry forever, useful in case of network disruption.
|
||||
StartLimitIntervalSec = 0;
|
||||
};
|
||||
|
||||
Unit.Description = "Unison pair sync (${name})";
|
||||
Service = {
|
||||
Restart = "always";
|
||||
RestartSec = 60;
|
||||
|
||||
CPUSchedulingPolicy = "idle";
|
||||
IOSchedulingClass = "idle";
|
||||
|
||||
Environment = [ "UNISON='${toString pairCfg.stateDirectory}'" ];
|
||||
ExecStart = ''
|
||||
${cfg.package}/bin/unison \
|
||||
|
@ -126,8 +118,16 @@ in {
|
|||
${strings.concatMapStringsSep " " escapeShellArg pairCfg.roots}
|
||||
'';
|
||||
};
|
||||
});
|
||||
|
||||
Install = { WantedBy = [ "default.target" ]; };
|
||||
systemd.user.timers = makeDefs (name: pairCfg: {
|
||||
Unit.Description = "Unison pair sync auto-restart (${name})";
|
||||
Install.WantedBy = [ "timers.target" ];
|
||||
Timer = {
|
||||
Unit = "${unitName name}.service";
|
||||
OnActiveSec = 1;
|
||||
OnUnitInactiveSec = 60;
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue