services: log-cleanup: Rewrite as a Shepherd timer.

This is a semi-incompatible change: gexps previously provided in the
‘schedule’ field will no longer work.

* gnu/services/admin.scm (log-cleanup-mcron-jobs): Remove.
(log-cleanup-shepherd-services): New procedure.
(log-cleanup-service-type): Extend SHEPHERD-ROOT-SERVICE-TYPE instead of
MCRON-SERVICE-TYPE.
* doc/guix.texi (Log Rotation): Adjust ‘schedule’ documentation
accordingly.

Change-Id: I2a3beb7dffbc9992b714a29423674db9c7dc6cab
This commit is contained in:
Ludovic Courtès 2024-12-11 19:48:57 +01:00
parent 4cef56587a
commit 100c1e1adf
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 22 additions and 8 deletions

View file

@ -385,18 +385,31 @@ Old log files are removed or compressed according to the configuration.")
(length logs) #$directory)
(for-each delete-file logs))))))
(define (log-cleanup-mcron-jobs configuration)
(define (log-cleanup-shepherd-services configuration)
(match-record configuration <log-cleanup-configuration>
(directory expiry schedule)
(list #~(job #$schedule
#$(log-cleanup-program directory expiry)))))
(directory expiry schedule)
(let ((program (log-cleanup-program directory expiry)))
(list (shepherd-service
(provision '(log-cleanup))
(requirement '(user-processes))
(modules '((shepherd service timer)))
(start #~(make-timer-constructor
#$(if (string? schedule)
#~(cron-string->calendar-event #$schedule)
schedule)
(command '(#$program))))
(stop #~(make-timer-destructor))
(actions (list (shepherd-action
(name 'trigger)
(documentation "Trigger log cleanup.")
(procedure #~trigger-timer)))))))))
(define log-cleanup-service-type
(service-type
(name 'log-cleanup)
(extensions
(list (service-extension mcron-service-type
log-cleanup-mcron-jobs)))
(list (service-extension shepherd-root-service-type
log-cleanup-shepherd-services)))
(description
"Periodically delete old log files.")))