From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id qKnKBpyiO2HgjAAAgWs5BA (envelope-from ) for ; Fri, 10 Sep 2021 20:23:24 +0200 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id WC9EApyiO2GGCwAAB5/wlQ (envelope-from ) for ; Fri, 10 Sep 2021 18:23:24 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 0F7941BA6A for ; Fri, 10 Sep 2021 20:23:23 +0200 (CEST) Received: from localhost ([::1]:54134 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mOlBK-0007js-2t for larch@yhetil.org; Fri, 10 Sep 2021 14:23:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41666) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mOlB0-0007ji-DZ for guix-patches@gnu.org; Fri, 10 Sep 2021 14:23:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:55879) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mOlB0-00026o-6T for guix-patches@gnu.org; Fri, 10 Sep 2021 14:23:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mOlB0-0000c2-0M for guix-patches@gnu.org; Fri, 10 Sep 2021 14:23:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#50504] [PATCH] home-services: Add Mcron. Resent-From: Xinglu Chen Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 10 Sep 2021 18:23:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 50504 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Andrew Tropin , 50504@debbugs.gnu.org Cc: Oleg Pykhalov , Ludovic =?UTF-8?Q?Court=C3=A8s?= Received: via spool by 50504-submit@debbugs.gnu.org id=B50504.16312981722321 (code B ref 50504); Fri, 10 Sep 2021 18:23:01 +0000 Received: (at 50504) by debbugs.gnu.org; 10 Sep 2021 18:22:52 +0000 Received: from localhost ([127.0.0.1]:39192 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mOlAl-0000bG-F0 for submit@debbugs.gnu.org; Fri, 10 Sep 2021 14:22:52 -0400 Received: from h87-96-130-155.cust.a3fiber.se ([87.96.130.155]:39912 helo=mail.yoctocell.xyz) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mOlAj-0000b0-L9 for 50504@debbugs.gnu.org; Fri, 10 Sep 2021 14:22:46 -0400 From: Xinglu Chen DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yoctocell.xyz; s=mail; t=1631298154; bh=h/s/MEziwmxXg4EmOsPklmgTpEfQwYAFt7X4B8wlj4g=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=IGP64Yzp0LHdSFvbm8yGFUycToFSvu9akLXRqnBx5KPQELMGTEqxtRmoMM+r9V8L0 1B3n/9v5NMbf1xOxaEnWnBygy9v6R2fPKHNUGFcnkCCIDo3+AXstZiQ7e1kFmMaj/n PnehisGgURvOVJrVScsloH1PSlUCQnvTgNL5dpg0= In-Reply-To: <8735qc66mt.fsf@trop.in> References: <8735qc66mt.fsf@trop.in> Date: Fri, 10 Sep 2021 20:22:30 +0200 Message-ID: <87a6kkxpcp.fsf@yoctocell.xyz> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1631298203; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post: dkim-signature; bh=LUR1dSBOPL8/Xyuvd5McftZPzzxXnJhZBJiykuzhfMc=; b=XPrr4eSfQf2PHVdN/8aK1IpdMHA0ff6lMfnFNdpk/Z4wza6wTwK+Bu0EqyciJ07/bSv8/T 9TtCcyWdinemKkGCVFDllxYH6XwxU6lphRKs0cAB5g4EmJOVo7EYq+cVHnQjFVcXHVfyPn ciCZbQ7xEZUIGhNKAXlKUPxg4P+91gK2hy/i2e2FD8Ad/za42rj6s9O+pM1wN3G3a9JbrS SsgHSJ+wLifC2VZ2GPyWTb4q61y2vIwuw3KOWqcLsxyzgFuRz24D5pNGoftiH3WHbBCtgP ZnBZ6Nt+zGjbq4nwePD7Ws65mFEkNnljXENiPfLpeR8VBmemKwXRgcwL3fYcIg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1631298203; a=rsa-sha256; cv=none; b=LyPIhUdDPaY38YS+vMz99FsZGdH0Sg9XXGXGeHhq91VLBcXRoeKM7dzZIoFR2j7CLB5n/n Kkjiei74tV2xtKBlsQGDXwBYsmyApH4xrtAiuNxBKlqDaEqc74U3AetuFXdDwVl+J73qNI JtfaRHID18aMeSTW4zvgRenJcRifLSEf0a/0waz5Xeb+sG3XBGcdRReA/BHSyARpC0Yz2b 6QlfCvfRbyi1YNkGeOB5YM/QaC8DL38yMqSK8m4CdW0fOMyCjFxZFNbTRWs9TllEwjjOi2 VvmMOGCzxGWbNzc9ND21iHIB8U7KGk2XXUmA5Xn4//gdr74XngG3w27YxKrJbA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=yoctocell.xyz header.s=mail header.b=IGP64Yzp; dmarc=fail reason="SPF not aligned (relaxed)" header.from=yoctocell.xyz (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Spam-Score: -1.91 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=yoctocell.xyz header.s=mail header.b=IGP64Yzp; dmarc=fail reason="SPF not aligned (relaxed)" header.from=yoctocell.xyz (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Queue-Id: 0F7941BA6A X-Spam-Score: -1.91 X-Migadu-Scanner: scn0.migadu.com X-TUID: A1pM9NaQ/Q4a --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Fri, Sep 10 2021, Andrew Tropin wrote: > * gnu/home-services/mcron.scm: New file. > * gnu/local.mk: Add this. > * doc/guix.texi: Add documentation about Mcron Home Service. > --- > > This is the last of home services I consider "must-have" for wip-guix-hom= e. > > It reuses two functions from (gnu services mcron) via @@, which can be > considered as a hack, the alternative solution is to expose those functio= ns > via #:export, I can do it if it's a preffered way or suggest other ideas, > please. The discussion on this topic: https://issues.guix.gnu.org/47238 > Included Ludovic and Xinglu in CC. An alternative would be put it the (gnu service mcron) to share more code between system service and home service. This was discussed briefly on rde-devel[1]. It might be worth discussing this issue on guix-devel before we add too many home service. > I took a brief look at the testing approach, seems the most relevant is > guix-system.sh and it is just a shell script, which runs a few guix system > subcommand and check if they fail or succeed. Please let me know, what i= s a > preferred way for writing tests and I'll try to provide some tests for Gu= ix > Home in the separate patch. The =E2=80=98guix-system.sh=E2=80=99 script seems to only test the =E2=80= =98guix system=E2=80=99 command, which doesn=E2=80=99t seem that related to the home services. I g= uess we could check the contents of the generated config files. There is (gnu build marionette) which creates a VM; we could then check that the relevant process is running. Maybe there is a better approach, though. [1]: > doc/guix.texi | 31 +++++++++- > gnu/home-services/mcron.scm | 115 ++++++++++++++++++++++++++++++++++++ > gnu/local.mk | 1 + > 3 files changed, 146 insertions(+), 1 deletion(-) > create mode 100644 gnu/home-services/mcron.scm > > diff --git a/doc/guix.texi b/doc/guix.texi > index e546fcc0d2..a7eacad762 100644 > --- a/doc/guix.texi > +++ b/doc/guix.texi > @@ -35685,7 +35685,36 @@ for example). > @cindex mcron > @cindex scheduling jobs >=20=20 > -mcron info here > +The @code{(gnu home-services mcron)} module provides an interface to > +GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,, > +mcron, GNU@tie{}mcron}). The information about system's mcron is > +applicable here (@pxref{Scheduled Job Execution}), the only difference > +for home services is that they have to be declared in > +@code{home-envirnoment} record instead of @code{operating-system}. =E2=80=9Cdeclared in a @code{home-environemnt} record instead of a @code{operating-system} record.=E2=80=9D > +@defvr {Scheme Variable} home-mcron-service-type > +This is the type of the @code{mcron} home service, whose value is an Why @code{mcron}? I would use =E2=80=9CMcron=E2=80=9D instead. > +@code{home-mcron-configuration} object. It allows to manage tasks =E2=80=9CIt allows one to manage scheduled tasks.=E2=80=9D > +This service type can be the target of a service extension that provides > +it additional job specifications (@pxref{Service Composition}). In s/it// > +other words, it is possible to define services that provide additional > +mcron jobs to run. > +@end defvr > + > +@deftp {Data Type} home-mcron-configuration > +Data type representing the configuration of mcron. > + > +@table @asis > +@item @code{mcron} (default: @var{mcron}) > +The mcron package to use. > + > +@item @code{jobs} > +This is a list of gexps (@pxref{G-Expressions}), where each gexp > +corresponds to an mcron job specification (@pxref{Syntax, mcron job > +specifications,, mcron, GNU@tie{}mcron}). > +@end table > +@end deftp >=20=20 > @node Shepherd Home Service > @subsection Managing User's Daemons > diff --git a/gnu/home-services/mcron.scm b/gnu/home-services/mcron.scm > new file mode 100644 > index 0000000000..fdfde179a5 > --- /dev/null > +++ b/gnu/home-services/mcron.scm > @@ -0,0 +1,115 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright =C2=A9 2021 Andrew Tropin > +;;; Copyright =C2=A9 2021 Xinglu Chen > +;;; > +;;; This file is part of GNU Guix. > +;;; > +;;; GNU Guix is free software; you can redistribute it and/or modify it > +;;; under the terms of the GNU General Public License as published by > +;;; the Free Software Foundation; either version 3 of the License, or (at > +;;; your option) any later version. > +;;; > +;;; GNU Guix is distributed in the hope that it will be useful, but > +;;; WITHOUT ANY WARRANTY; without even the implied warranty of > +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +;;; GNU General Public License for more details. > +;;; > +;;; You should have received a copy of the GNU General Public License > +;;; along with GNU Guix. If not, see . > + > +(define-module (gnu home-services mcron) > + #:use-module (gnu packages guile-xyz) > + #:use-module (gnu home-services) > + #:use-module (gnu home-services shepherd) > + #:use-module (gnu services shepherd) > + #:use-module (guix records) > + #:use-module (guix gexp) > + #:use-module (srfi srfi-1) > + #:use-module (ice-9 match) > + > + #:export (home-mcron-configuration > + home-mcron-service-type)) > + > +;;; Commentary: > +;; > +;; Service for the GNU mcron cron job manager. > +;; > +;; Example configuration, the first job runs mbsync once every ten > +;; minutes, the second one writes "Mcron service" to ~/mcron-file once > +;; every minute. > +;; > +;; (service home-mcron-service-type > +;; (home-mcron-configuration > +;; (jobs (list #~(job '(next-minute > +;; (range 0 60 10)) > +;; (lambda () > +;; (system* "mbsync" "--all"))) > +;; #~(job next-minute-from > +;; (lambda () > +;; (call-with-output-file (string-appen= d (getenv "HOME") > +;; = "/mcron-file") > +;; (lambda (port) > +;; (display "Mcron service" port)))= )))))) > +;; > +;;; Code: > + > +(define-record-type* home-mcron-configuration > + make-home-mcron-configuration > + home-mcron-configuration? > + (package home-mcron-configuration-package ; package > + (default mcron)) > + (jobs home-mcron-configuration-jobs ; list of jobs > + (default '()))) > + > +(define job-files (@@ (gnu services mcron) job-files)) > +(define shepherd-schedule-action > + (@@ (gnu services mcron) shepherd-schedule-action)) > + > +(define home-mcron-shepherd-services > + (match-lambda > + (($ mcron '()) ; no jobs to run > + '()) > + (($ mcron jobs) > + (let ((files (job-files mcron jobs))) > + (list (shepherd-service > + (documentation "User cron jobs.") > + (provision '(mcron)) > + (modules `((srfi srfi-1) > + (srfi srfi-26) > + (ice-9 popen) ; for the 'schedule' a= ction > + (ice-9 rdelim) > + (ice-9 match) > + ,@%default-modules)) > + (start #~(make-forkexec-constructor > + (list #$(file-append mcron "/bin/mcron") #$@file= s) > + #:log-file (string-append > + (or (getenv "XDG_LOG_HOME") > + (format #f "~a/.local/var/log" > + (getenv "HOME"))) > + "/mcron.log"))) > + (stop #~(make-kill-destructor)) > + (actions > + (list (shepherd-schedule-action mcron files))))))))) > + > +(define home-mcron-profile (compose list home-mcron-configuration-packag= e)) > + > +(define (home-mcron-extend config jobs) > + (home-mcron-configuration > + (inherit config) > + (jobs (append (home-mcron-configuration-jobs config) > + jobs)))) > + > +(define home-mcron-service-type > + (service-type (name 'home-mcron) > + (extensions > + (list (service-extension > + home-shepherd-service-type > + home-mcron-shepherd-services) > + (service-extension > + home-profile-service-type > + home-mcron-profile))) > + (compose concatenate) > + (extend home-mcron-extend) > + (default-value (home-mcron-configuration)) > + (description > + "Install and configure the GNU mcron cron job manager."= ))) > diff --git a/gnu/local.mk b/gnu/local.mk > index 31ad1a43db..8212bc5391 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -80,6 +80,7 @@ GNU_SYSTEM_MODULES =3D \ > %D%/home-services/configuration.scm \ > %D%/home-services/shells.scm \ > %D%/home-services/shepherd.scm \ > + %D%/home-services/mcron.scm \ > %D%/home-services/utils.scm \ > %D%/home-services/xdg.scm \ > %D%/image.scm \ > --=20 > 2.33.0 --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJJBAEBCAAzFiEEAVhh4yyK5+SEykIzrPUJmaL7XHkFAmE7omYVHHB1YmxpY0B5 b2N0b2NlbGwueHl6AAoJEKz1CZmi+1x5S6AQALZfdGkBjb6TJRy8PJhPwO9WrjdG r8oQiTVp6k8RLG7Pt29TuvnE/djGqPnSw7iHUBlBXFCuNqTKfIxYr4N0ZnVdidCg 5IC9GIcFQtb7mzXYzm4zfW9Bl1MkCzMWxYh6pM9CAKW8OQWqaMPWVAw7OgWeFGj3 O/6IOufKKgmUlrfP5tE5lBTcjyYlIq62ZWQeZoJrKRe5G4PmQ06549WzZ9+gMsDI YU3LbHVmSdbBwzPl9GMcHsn1Zz62Ho0lcWUmFKXg8rxFfRSik/B0wYhtxOXnhGZN mh3rgZPF0cQp3HNeAFWT18Du/CY7JC2e0VcXMxbEOCEv7Z2aRcN2TyBfKVNft00f apZXl3Fsuyt2o4jIV8XEanXT1IQZUwS8Y3mPSvDikXVfTOmNQMQJjREA5KMoVa24 DBeAc6gNT7DKeomrpI7Qig+TXqFs7X0dq/H8wmDC5lnYXXedlgPH/Xmex9Tl7Kxd 8ARoJvvtITR5rsxS9v+KNijccPxZJewG9ebCHDiZPwlqjJQPUUs8AnaURDbjkMoG W6TfbD4NTAzX0WXSOLVPnwQYUSDQWaK0I0VG1sFVQ93Ezb3x7bxG2muxuIKtKksq 8hjXet62cnxEUITLtEBhMq4tBGVflMqMJWDzEszHIYlZ4BHuzkkbz42v9ae2iBRQ U4q5MU+EsmeleqXn =NJzt -----END PGP SIGNATURE----- --=-=-=--