summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-06-26 15:27:34 +0200
committerLudovic Courtès <ludo@gnu.org>2016-06-26 15:29:32 +0200
commit8ac6282c4b97ece43b922a8c1a99a0a8e753c765 (patch)
tree3c85f2b1e9705698aa46bb8d147d26a12b1ea88d /doc
parentc9a03e65b8558d10669cc5a844cd1f83f3651828 (diff)
downloadpatches-8ac6282c4b97ece43b922a8c1a99a0a8e753c765.tar
patches-8ac6282c4b97ece43b922a8c1a99a0a8e753c765.tar.gz
doc: Augment mcron example.
Suggested by Danny Milosavljevic. * doc/guix.texi (Scheduled Job Execution): Add unprivileged job example, and show the use of thunks as job actions and gexps.
Diffstat (limited to 'doc')
-rw-r--r--doc/guix.texi28
1 files changed, 23 insertions, 5 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 9e3806c845..7204f2e939 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -7507,27 +7507,45 @@ Unix @command{cron} daemon; the main difference is that it is
implemented in Guile Scheme, which provides a lot of flexibility when
specifying the scheduling of jobs and their actions.
-For example, to define an operating system that runs the
+The example below defines an operating system that runs the
@command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
-and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily:
+and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
+well as the @command{mkid} command on behalf of an unprivileged user
+(@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
+gexps to introduce job definitions that are passed to mcron
+(@pxref{G-Expressions}).
@lisp
(use-modules (guix) (gnu) (gnu services mcron))
+(use-package-modules base idutils)
(define updatedb-job
- ;; Run 'updatedb' at 3 AM every day.
+ ;; Run 'updatedb' at 3AM every day. Here we write the
+ ;; job's action as a Scheme procedure.
#~(job '(next-hour '(3))
- "updatedb --prunepaths='/tmp /var/tmp /gnu/store'"))
+ (lambda ()
+ (execl (string-append #$findutils "/bin/updatedb")
+ "updatedb"
+ "--prunepaths=/tmp /var/tmp /gnu/store"))))
(define garbage-collector-job
;; Collect garbage 5 minutes after midnight every day.
+ ;; The job's action is a shell command.
#~(job "5 0 * * *" ;Vixie cron syntax
"guix gc -F 1G"))
+(define idutils-jobs
+ ;; Update the index database as user "charlie" at 12:15PM
+ ;; and 19:15PM. This runs from the user's home directory.
+ #~(job '(next-minute-from (next-hour '(12 19)) '(15))
+ (string-append #$idutils "/bin/mkid src")
+ #:user "charlie"))
+
(operating-system
;; @dots{}
(services (cons (mcron-service (list garbage-collector-job
- updatedb-job))
+ updatedb-job
+ idutils-job))
%base-services)))
@end lisp