mirror of
https://https.git.savannah.gnu.org/git/guix.git/
synced 2025-07-12 18:10:47 +02:00
services: fstrim: Turn into a Shepherd timer.
* gnu/services/linux.scm (mcron-time?): Remove. (shepherd-calendar-event?): New procedure. (fstrim-configuration)[schedule]: Change type to ‘shepherd-calendar-event’ and update docstring. (fstrim-mcron-job): Rename to… (fstrim-shepherd-services): … this. Return a list of Shepherd services. (fstrim-service-type): Adjust accordingly. * doc/guix.texi (Linux Services): Update. Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Change-Id: I9a7433cb15a1f4600470a915769d612e6e644dd8
This commit is contained in:
parent
71ae6f2a19
commit
465ce8c6a6
2 changed files with 36 additions and 28 deletions
|
@ -42127,6 +42127,7 @@ in its default configuration with:
|
|||
@end defvar
|
||||
|
||||
@c %start of fragment
|
||||
|
||||
@deftp {Data Type} fstrim-configuration
|
||||
Available @code{fstrim-configuration} fields are:
|
||||
|
||||
|
@ -42134,11 +42135,11 @@ Available @code{fstrim-configuration} fields are:
|
|||
@item @code{package} (default: @code{util-linux}) (type: file-like)
|
||||
The package providing the @command{fstrim} command.
|
||||
|
||||
@item @code{schedule} (default: @code{"0 0 * * 0"}) (type: mcron-time)
|
||||
Schedule for launching @command{fstrim}. This can be a procedure, a
|
||||
list or a string. For additional information, see @ref{Guile
|
||||
Syntax,,Job specification,mcron,the mcron manual}. By default this is
|
||||
set to run weekly on Sunday at 00:00.
|
||||
@item @code{schedule} (default: @code{"0 0 * * 0"}) (type: Shepherd calendar event)
|
||||
Schedule for launching @command{fstrim}, expressed as a string in
|
||||
traditional cron syntax or as a gexp evaluating to a Shepherd calendar
|
||||
event (@pxref{Timers,,, shepherd,The GNU Shepherd Manual}). By default
|
||||
this is set to run weekly on Sunday at 00:00.
|
||||
|
||||
@item @code{listed-in} (default: @code{'("/etc/fstab" "/proc/self/mountinfo")}) (type: maybe-list-of-strings)
|
||||
List of files in fstab or kernel mountinfo format. All missing or empty
|
||||
|
@ -42157,7 +42158,10 @@ Extra options to append to @command{fstrim} (run @samp{man fstrim} for
|
|||
more information).
|
||||
|
||||
@end table
|
||||
|
||||
@end deftp
|
||||
|
||||
|
||||
@c %end of fragment
|
||||
|
||||
@cindex modprobe
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
#:use-module (gnu services admin)
|
||||
#:use-module (gnu services base)
|
||||
#:use-module (gnu services configuration)
|
||||
#:use-module (gnu services mcron)
|
||||
#:use-module (gnu services shepherd)
|
||||
#:use-module (gnu packages linux)
|
||||
#:use-module (srfi srfi-1)
|
||||
|
@ -196,8 +195,8 @@ representation."
|
|||
;;; fstrim
|
||||
;;;
|
||||
|
||||
(define (mcron-time? x)
|
||||
(or (procedure? x) (string? x) (list? x)))
|
||||
(define (shepherd-calendar-event? x)
|
||||
(or (string? x) (gexp? x)))
|
||||
|
||||
(define-maybe list-of-strings (prefix fstrim-))
|
||||
|
||||
|
@ -216,11 +215,11 @@ representation."
|
|||
"The package providing the @command{fstrim} command."
|
||||
empty-serializer)
|
||||
(schedule
|
||||
(mcron-time "0 0 * * 0")
|
||||
"Schedule for launching @command{fstrim}. This can be a procedure, a list
|
||||
or a string. For additional information, see @ref{Guile Syntax,,
|
||||
Job specification, mcron, the mcron manual}. By default this is set to run
|
||||
weekly on Sunday at 00:00."
|
||||
(shepherd-calendar-event "0 0 * * 0")
|
||||
"Schedule for launching @command{fstrim}, expressed as a string in
|
||||
traditional cron syntax or as a gexp evaluating to a Shepherd calendar
|
||||
event (@pxref{Timers,,, shepherd, The GNU Shepherd Manual}). By default this
|
||||
is set to run weekly on Sunday at 00:00."
|
||||
empty-serializer)
|
||||
;; The following are fstrim-related options.
|
||||
(listed-in
|
||||
|
@ -251,26 +250,31 @@ more information)."
|
|||
rcons
|
||||
fstrim-configuration-fields))
|
||||
|
||||
(define (fstrim-mcron-job config)
|
||||
(match-record config <fstrim-configuration> (package schedule)
|
||||
#~(job
|
||||
;; Note: The “if” below is to ensure that
|
||||
;; lists are ungexp'd correctly since @var{schedule}
|
||||
;; can be either a procedure, a string or a list.
|
||||
#$(if (list? schedule)
|
||||
#~'(#$@schedule)
|
||||
schedule)
|
||||
(lambda ()
|
||||
(system* #$(file-append package "/sbin/fstrim")
|
||||
#$@(serialize-fstrim-configuration config)))
|
||||
"fstrim")))
|
||||
(define (fstrim-shepherd-services config)
|
||||
(match-record config <fstrim-configuration>
|
||||
(package schedule)
|
||||
(list (shepherd-service
|
||||
(provision '(fstrim))
|
||||
(requirement '(user-processes))
|
||||
(modules '((shepherd service timer)))
|
||||
(start #~(make-timer-constructor
|
||||
#$(if (string? schedule)
|
||||
#~(cron-string->calendar-event #$schedule)
|
||||
schedule)
|
||||
(command
|
||||
(list #$(file-append package "/sbin/fstrim")
|
||||
#$@(serialize-fstrim-configuration config)))
|
||||
#:wait-for-termination? #t))
|
||||
(stop #~(make-timer-destructor))
|
||||
(documentation "Periodically run the 'fstrim' command.")
|
||||
(actions (list shepherd-trigger-action))))))
|
||||
|
||||
(define fstrim-service-type
|
||||
(service-type
|
||||
(name 'fstrim)
|
||||
(extensions
|
||||
(list (service-extension mcron-service-type
|
||||
(compose list fstrim-mcron-job))))
|
||||
(list (service-extension shepherd-root-service-type
|
||||
fstrim-shepherd-services)))
|
||||
(description "Discard unused blocks from file systems.")
|
||||
(default-value (fstrim-configuration))))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue