nixos/atop: Convert log format to fix service start
Raw logs are stored in a versioned binary format and must be update with atopconvert(1) upon atop version updates. Failure to do so results in atop.service startup failure as I found out the hard way after the "atop: 2.6.0 -> 2.7.1"[0] bump: ``` May 31 01:49:25 <hostname> sh[2269709]: existing file /var/log/atop/atop_20220531 has incompatible header May 31 01:49:25 <hostname> sh[2269709]: (created by version 2.6 - current version 2.7) May 31 01:49:25 <hostname> systemd[1]: atop.service: Main process exited, code=exited, status=7/NOTRUNNING ``` Convert logs in `ExecStartPre` and replace them iff updated. This is to avoid changing original modification times upon every service start and thus work against atop's log rotation (see existing `ExecStartPre`). 0: https://github.com/NixOS/nixpkgs/pull/175180#issuecomment-1141546487
This commit is contained in:
parent
cac45c69ab
commit
09350ff7d4
1 changed files with 18 additions and 0 deletions
|
@ -136,6 +136,24 @@ in
|
|||
packages = [ atop (lib.mkIf cfg.netatop.enable cfg.netatop.package) ];
|
||||
services =
|
||||
mkService cfg.atopService.enable "atop" [ atop ]
|
||||
// lib.mkIf cfg.atopService.enable {
|
||||
# always convert logs to newer version first
|
||||
# XXX might trigger TimeoutStart but restarting atop.service will
|
||||
# convert remainings logs and start eventually
|
||||
atop.serviceConfig.ExecStartPre = pkgs.writeShellScript "atop-update-log-format" ''
|
||||
set -e -u
|
||||
for logfile in "$LOGPATH"/atop_*
|
||||
do
|
||||
${atop}/bin/atopconvert "$logfile" "$logfile".new
|
||||
# only replace old file if version was upgraded to avoid
|
||||
# false positives for atop-rotate.service
|
||||
if ! ${pkgs.diffutils}/bin/cmp -s "$logfile" "$logfile".new
|
||||
then
|
||||
${pkgs.coreutils}/bin/mv -v -f "$logfile".new "$logfile"
|
||||
fi
|
||||
done
|
||||
'';
|
||||
}
|
||||
// mkService cfg.atopacctService.enable "atopacct" [ atop ]
|
||||
// mkService cfg.netatop.enable "netatop" [ cfg.netatop.package ]
|
||||
// mkService cfg.atopgpu.enable "atopgpu" [ atop ];
|
||||
|
|
Loading…
Reference in a new issue