From debbugs-submit-bounces@debbugs.gnu.org Sun Mar 26 14:18:46 2023 Received: (at submit) by debbugs.gnu.org; 26 Mar 2023 18:18:46 +0000 Received: from localhost ([127.0.0.1]:45776 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pgUx3-0002ZB-RZ for submit@debbugs.gnu.org; Sun, 26 Mar 2023 14:18:46 -0400 Received: from lists.gnu.org ([209.51.188.17]:50520) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pgUx2-0002Z1-Bs for submit@debbugs.gnu.org; Sun, 26 Mar 2023 14:18:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pgUx1-0002yT-Va for guix-patches@gnu.org; Sun, 26 Mar 2023 14:18:43 -0400 Received: from smtpm1.myservices.hosting ([185.26.105.232]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pgUwz-0006HT-Tk for guix-patches@gnu.org; Sun, 26 Mar 2023 14:18:43 -0400 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpm1.myservices.hosting (Postfix) with ESMTP id B74CA202E5 for ; Sun, 26 Mar 2023 20:18:39 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id 52D3F800A9; Sun, 26 Mar 2023 20:18:39 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 4y3TgJg0ssaJ; Sun, 26 Mar 2023 20:18:38 +0200 (CEST) Received: from guix-nuc.home.arpa (bl9-119-177.dsl.telepac.pt [85.242.119.177]) (Authenticated sender: lumen@makinata.eu) by mail1.netim.hosting (Postfix) with ESMTPSA id E5E91800A8; Sun, 26 Mar 2023 20:18:37 +0200 (CEST) From: Bruno Victal To: guix-patches@gnu.org Subject: [PATCH] services: mcron: Add instance name support for mcron. Date: Sun, 26 Mar 2023 19:18:25 +0100 Message-Id: <47e924fd42f74fc2800dc64399f7a069ad463515.1679854500.git.mirai@makinata.eu> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 X-Debbugs-CC: maxim.cournoyer@gmail.com Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=185.26.105.232; envelope-from=mirai@makinata.eu; helo=smtpm1.myservices.hosting X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit Cc: Bruno Victal X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) Allow running more than one mcron instance. Follow-up to . * gnu/services/mcron.scm (mcron-configuration)[instance-name]: New field. (shepherd-schedule-action): Implement instance-name support. * doc/guix.texi (Scheduled Job Execution): Update it. --- doc/guix.texi | 26 ++++++++++++++++++++++++++ gnu/services/mcron.scm | 16 +++++++++++++--- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 3e335306f1..0f735489d5 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -19376,6 +19376,10 @@ Scheduled Job Execution @item @code{mcron} (default: @code{mcron}) (type: file-like) The mcron package to use. +@item @code{instance} (type: maybe-symbol) +Set the shepherd service name to @code{mcron-@var{instance}}. This is +useful when you want to have more than one mcron instance. + @item @code{jobs} (default: @code{()}) (type: list-of-gexps) This is a list of gexps (@pxref{G-Expressions}), where each gexp corresponds to an mcron job specification (@pxref{Syntax, mcron job @@ -19400,6 +19404,28 @@ Scheduled Job Execution @end deftp @c %end of fragment +Occasionally, it is desirable to run another mcron instance to separate +some of the jobs from the main mcron instance for clarity purposes, or if +the jobs are very chatty and frequent. (for example, a heartbeat check +every 30 seconds) + +The example below shows how an extra mcron service can be defined. +@lisp +(use (guix) + (guix records) + (gnu services) + (gnu services mcron)) + +(define secondary-mcron-service-type + (service-type + (inherit mcron-service-type) + (name 'mcron-secondary) + (default-value + (mcron-configuration + (instance 'secondary) + (log-file "/var/log/mcron-secondary.log"))))) +@end lisp + @node Log Rotation @subsection Log Rotation diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 2ef5980e09..c949f1aebc 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -27,6 +27,7 @@ (define-module (gnu services mcron) #:use-module (guix records) #:use-module (guix gexp) #:use-module (srfi srfi-1) + #:use-module (ice-9 format) #:use-module (ice-9 match) #:use-module (ice-9 vlist) #:export (mcron-configuration @@ -59,12 +60,18 @@ (define list-of-gexps? (list-of gexp?)) (define-maybe/no-serialization string) +(define-maybe/no-serialization symbol) (define-configuration/no-serialization mcron-configuration (mcron (file-like mcron) "The mcron package to use.") + (instance + maybe-symbol + "Set the shepherd service name to @code{mcron-@var{instance}}. +This is useful when you want to have more than one mcron instance.") + (jobs (list-of-gexps '()) "This is a list of gexps (@pxref{G-Expressions}), where each gexp @@ -158,12 +165,15 @@ (define (shepherd-schedule-action mcron files) (define (mcron-shepherd-services config) (match-record config - (mcron jobs log? log-file log-format date-format) + (mcron jobs log? log-file log-format date-format instance) (if (eq? jobs '()) '() ;nothing to do - (let ((files (job-files mcron jobs))) + (let ((files (job-files mcron jobs)) + (service-name + (string->symbol + (format #f "mcron~@[-~a~]" (maybe-value instance))))) (list (shepherd-service - (provision '(mcron)) + (provision (list service-name)) (requirement '(user-processes)) (modules `((srfi srfi-1) (srfi srfi-26) -- 2.39.1 From debbugs-submit-bounces@debbugs.gnu.org Wed Mar 29 09:49:40 2023 Received: (at 62465) by debbugs.gnu.org; 29 Mar 2023 13:49:40 +0000 Received: from localhost ([127.0.0.1]:51550 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1phWBH-0000Sj-SR for submit@debbugs.gnu.org; Wed, 29 Mar 2023 09:49:40 -0400 Received: from smtpmciv2.myservices.hosting ([185.26.107.238]:49320) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1phWBF-0000SX-5j for 62465@debbugs.gnu.org; Wed, 29 Mar 2023 09:49:38 -0400 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpmciv2.myservices.hosting (Postfix) with ESMTP id B3F5820D03; Wed, 29 Mar 2023 15:49:35 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id BE80A800A9; Wed, 29 Mar 2023 15:44:12 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id SIOLVCxnlxZS; Wed, 29 Mar 2023 15:44:12 +0200 (CEST) Received: from guix-nuc.home.arpa (bl9-119-177.dsl.telepac.pt [85.242.119.177]) (Authenticated sender: lumen@makinata.eu) by mail1.netim.hosting (Postfix) with ESMTPSA id 23DB98009F; Wed, 29 Mar 2023 15:44:12 +0200 (CEST) From: Bruno Victal To: 62465@debbugs.gnu.org Subject: [PATCH v2 1/2] services: mcron: Add 'shepherd-requirement' field. Date: Wed, 29 Mar 2023 14:44:05 +0100 Message-Id: <26ad3fb85ba517dc1a500c287f07f20a00cec625.1680097409.git.mirai@makinata.eu> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 62465 Cc: Bruno Victal , maxim.cournoyer@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) * gnu/services/mcron.scm (mcron-configuration)[shepherd-requirement]: New field. (list-of-symbols?): New predicate. (mcron-shepherd-services): Add support for additional shepherd requirements. * doc/guix.texi (Scheduled Job Execution): Update it. --- doc/guix.texi | 4 ++++ gnu/services/mcron.scm | 13 +++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index c49e51b72e..5a597cf122 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -19379,6 +19379,10 @@ Scheduled Job Execution @item @code{mcron} (default: @code{mcron}) (type: file-like) The mcron package to use. +@item @code{shepherd-requirement} (default: @code{()}) (type: list-of-symbols) +This is a list of symbols naming Shepherd services that this service +will depend on. + @item @code{jobs} (default: @code{()}) (type: list-of-gexps) This is a list of gexps (@pxref{G-Expressions}), where each gexp corresponds to an mcron job specification (@pxref{Syntax, mcron job diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 2ef5980e09..99eb0edd60 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -32,6 +32,7 @@ (define-module (gnu services mcron) #:export (mcron-configuration mcron-configuration? mcron-configuration-mcron + mcron-configuration-shepherd-requirement mcron-configuration-jobs mcron-configuration-log? mcron-configuration-log-file @@ -58,6 +59,9 @@ (define-module (gnu services mcron) (define list-of-gexps? (list-of gexp?)) +(define list-of-symbols? + (list-of symbol?)) + (define-maybe/no-serialization string) (define-configuration/no-serialization mcron-configuration @@ -65,6 +69,11 @@ (define-configuration/no-serialization mcron-configuration (file-like mcron) "The mcron package to use.") + (shepherd-requirement + (list-of-symbols '()) + "This is a list of symbols naming Shepherd services that this service +will depend on.") + (jobs (list-of-gexps '()) "This is a list of gexps (@pxref{G-Expressions}), where each gexp @@ -158,13 +167,13 @@ (define (shepherd-schedule-action mcron files) (define (mcron-shepherd-services config) (match-record config - (mcron jobs log? log-file log-format date-format) + (mcron shepherd-requirement jobs log? log-file log-format date-format) (if (eq? jobs '()) '() ;nothing to do (let ((files (job-files mcron jobs))) (list (shepherd-service (provision '(mcron)) - (requirement '(user-processes)) + (requirement `(user-processes ,@shepherd-requirement)) (modules `((srfi srfi-1) (srfi srfi-26) (ice-9 popen) ;for the 'schedule' action -- 2.39.1 From debbugs-submit-bounces@debbugs.gnu.org Wed Mar 29 09:54:46 2023 Received: (at 62465) by debbugs.gnu.org; 29 Mar 2023 13:54:46 +0000 Received: from localhost ([127.0.0.1]:51554 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1phWGD-0000a6-KS for submit@debbugs.gnu.org; Wed, 29 Mar 2023 09:54:46 -0400 Received: from smtpmciv3.myservices.hosting ([185.26.107.239]:38036) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1phWGB-0000Zy-U7 for 62465@debbugs.gnu.org; Wed, 29 Mar 2023 09:54:44 -0400 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpmciv3.myservices.hosting (Postfix) with ESMTP id C8F062038A; Wed, 29 Mar 2023 15:54:42 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id 64AC080079; Wed, 29 Mar 2023 15:54:42 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id d_nZwT1_pIW1; Wed, 29 Mar 2023 15:54:42 +0200 (CEST) Received: from guix-nuc.home.arpa (bl9-119-177.dsl.telepac.pt [85.242.119.177]) (Authenticated sender: lumen@makinata.eu) by mail1.netim.hosting (Postfix) with ESMTPSA id 7E6E98009A; Wed, 29 Mar 2023 15:54:41 +0200 (CEST) From: Bruno Victal To: 62465@debbugs.gnu.org Subject: [PATCH v2 2/2] services: mcron: Add instance name support for mcron. Date: Wed, 29 Mar 2023 14:54:34 +0100 Message-Id: <79a56d4be6ad19853bbae7dd3e6767b5b78806c2.1680098053.git.mirai@makinata.eu> X-Mailer: git-send-email 2.39.1 In-Reply-To: <26ad3fb85ba517dc1a500c287f07f20a00cec625.1680097409.git.mirai@makinata.eu> References: <26ad3fb85ba517dc1a500c287f07f20a00cec625.1680097409.git.mirai@makinata.eu> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 62465 Cc: Bruno Victal , maxim.cournoyer@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Allow running more than one mcron instance. Make log-file robust against operator error when provisioning an additional mcron instance but log-file is left at its default value. Follow-up to . * gnu/services/mcron.scm (mcron-configuration)[instance-name]: New field. [log-file]: Update description. (mcron-shepherd-services): Implement instance-name support. Make log-file robust against multiple instances writing to the same default log-file. * doc/guix.texi (Scheduled Job Execution): Update it. --- doc/guix.texi | 30 +++++++++++++++++++++++++++++- gnu/services/mcron.scm | 34 +++++++++++++++++++++++++++++----- 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 5a597cf122..ba80b9660c 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -19383,6 +19383,10 @@ Scheduled Job Execution This is a list of symbols naming Shepherd services that this service will depend on. +@item @code{instance} (type: maybe-symbol) +Set the shepherd service name to @code{mcron-@var{instance}}. This is +useful when you want to have more than one mcron instance. + @item @code{jobs} (default: @code{()}) (type: list-of-gexps) This is a list of gexps (@pxref{G-Expressions}), where each gexp corresponds to an mcron job specification (@pxref{Syntax, mcron job @@ -19392,7 +19396,9 @@ Scheduled Job Execution Log messages to standard output. @item @code{log-file} (default: @code{"/var/log/mcron.log"}) (type: string) -Log file location. +Log file location. When @var{instance} is set and @var{log-file} is +kept at its @emph{default value}, it will log to +@file{/var/log/mcron-@var{instance}.log}. @item @code{log-format} (default: @code{"~1@@*~a ~a: ~a~%"}) (type: string) @code{(ice-9 format)} format string for log messages. The default value @@ -19407,6 +19413,28 @@ Scheduled Job Execution @end deftp @c %end of fragment +Occasionally, it is desirable to run another mcron instance to separate +some of the jobs from the main mcron instance for clarity purposes, or if +the jobs are very chatty and frequent. (for example, a heartbeat check +every 30 seconds) + +The example below shows how an extra mcron service can be defined. +@lisp +(use (guix) + (guix records) + (gnu services) + (gnu services mcron)) + +(define secondary-mcron-service-type + (service-type + (inherit mcron-service-type) + (name 'mcron-secondary) + (default-value + (mcron-configuration + (instance 'secondary) + (log-file "/var/log/mcron-secondary.log"))))) +@end lisp + @node Log Rotation @subsection Log Rotation diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 99eb0edd60..4d8ab4af2c 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -27,12 +27,14 @@ (define-module (gnu services mcron) #:use-module (guix records) #:use-module (guix gexp) #:use-module (srfi srfi-1) + #:use-module (ice-9 format) #:use-module (ice-9 match) #:use-module (ice-9 vlist) #:export (mcron-configuration mcron-configuration? mcron-configuration-mcron mcron-configuration-shepherd-requirement + mcron-configuration-instance mcron-configuration-jobs mcron-configuration-log? mcron-configuration-log-file @@ -63,6 +65,7 @@ (define list-of-symbols? (list-of symbol?)) (define-maybe/no-serialization string) +(define-maybe/no-serialization symbol) (define-configuration/no-serialization mcron-configuration (mcron @@ -74,6 +77,11 @@ (define-configuration/no-serialization mcron-configuration "This is a list of symbols naming Shepherd services that this service will depend on.") + (instance + maybe-symbol + "Set the shepherd service name to @code{mcron-@var{instance}}. +This is useful when you want to have more than one mcron instance.") + (jobs (list-of-gexps '()) "This is a list of gexps (@pxref{G-Expressions}), where each gexp @@ -86,7 +94,9 @@ (define-configuration/no-serialization mcron-configuration (log-file (string "/var/log/mcron.log") - "Log file location.") + "Log file location. When @var{instance} is set and @var{log-file} +is kept at its @emph{default value}, it will log to +@file{/var/log/mcron-@var{instance}.log}.") (log-format (string "~1@*~a ~a: ~a~%") @@ -167,12 +177,26 @@ (define (shepherd-schedule-action mcron files) (define (mcron-shepherd-services config) (match-record config - (mcron shepherd-requirement jobs log? log-file log-format date-format) + (mcron shepherd-requirement instance + jobs log? log-file log-format date-format) (if (eq? jobs '()) '() ;nothing to do - (let ((files (job-files mcron jobs))) + (let* ((files (job-files mcron jobs)) + (instance-name + (format #f "mcron~@[-~a~]" (maybe-value instance))) + (service-name (string->symbol instance-name)) + ;; Make log-file robust against multiple instances + ;; attempting to write to the same file when + ;; left at its default value. + (default-log-file (mcron-configuration-log-file + (mcron-configuration))) + (log-file* (if (and (maybe-value-set? instance) + (equal? log-file default-log-file)) + (string-append (dirname default-log-file) + "/" instance-name ".log") + log-file))) (list (shepherd-service - (provision '(mcron)) + (provision (list service-name)) (requirement `(user-processes ,@shepherd-requirement)) (modules `((srfi srfi-1) (srfi srfi-26) @@ -199,7 +223,7 @@ (define (mcron-shepherd-services config) (remove (cut string-prefix? "PATH=" <>) (environ))) - #:log-file #$log-file)) + #:log-file #$log-file*)) (stop #~(make-kill-destructor)) (actions (list (shepherd-schedule-action mcron files))))))))) -- 2.39.1 From debbugs-submit-bounces@debbugs.gnu.org Thu Mar 30 10:15:29 2023 Received: (at 62465) by debbugs.gnu.org; 30 Mar 2023 14:15:29 +0000 Received: from localhost ([127.0.0.1]:59155 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pht3o-0000Wv-KQ for submit@debbugs.gnu.org; Thu, 30 Mar 2023 10:15:29 -0400 Received: from smtpmciv2.myservices.hosting ([185.26.107.238]:42192) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pht3n-0000Wo-DR for 62465@debbugs.gnu.org; Thu, 30 Mar 2023 10:15:27 -0400 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpmciv2.myservices.hosting (Postfix) with ESMTP id 48CCD20DEA; Thu, 30 Mar 2023 16:15:26 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id F1117800A0; Thu, 30 Mar 2023 16:15:25 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id pEGp2giG8Q6B; Thu, 30 Mar 2023 16:15:25 +0200 (CEST) Received: from guix-nuc.home.arpa (unknown [10.192.1.83]) (Authenticated sender: lumen@makinata.eu) by mail1.netim.hosting (Postfix) with ESMTPSA id 6D08D8009E; Thu, 30 Mar 2023 16:15:25 +0200 (CEST) From: Bruno Victal To: 62465@debbugs.gnu.org Subject: [PATCH v3 1/2] services: mcron: Add 'shepherd-requirement' field. Date: Thu, 30 Mar 2023 15:15:18 +0100 Message-Id: <4427884b06f47c6152b35e9559e6c1dc9412ebe5.1680185251.git.mirai@makinata.eu> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 62465 Cc: Bruno Victal , maxim.cournoyer@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) * gnu/services/mcron.scm (mcron-configuration)[shepherd-requirement]: New field. (list-of-symbols?): New predicate. (mcron-shepherd-services): Add support for additional shepherd requirements. * doc/guix.texi (Scheduled Job Execution): Update it. --- Notable changes from v2 to v3: Changing the final log-file value used in v2 behind the scenes made it poorly reflexive as you couldn't trust what the accessors returned. v3 makes log-file a mandatory field that has to be set manually and leaves the default service instantiation responsible for setting the default log-file that is used for the main mcron instance. doc/guix.texi | 4 ++++ gnu/services/mcron.scm | 13 +++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index c49e51b72e..5a597cf122 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -19379,6 +19379,10 @@ Scheduled Job Execution @item @code{mcron} (default: @code{mcron}) (type: file-like) The mcron package to use. +@item @code{shepherd-requirement} (default: @code{()}) (type: list-of-symbols) +This is a list of symbols naming Shepherd services that this service +will depend on. + @item @code{jobs} (default: @code{()}) (type: list-of-gexps) This is a list of gexps (@pxref{G-Expressions}), where each gexp corresponds to an mcron job specification (@pxref{Syntax, mcron job diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 2ef5980e09..99eb0edd60 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -32,6 +32,7 @@ (define-module (gnu services mcron) #:export (mcron-configuration mcron-configuration? mcron-configuration-mcron + mcron-configuration-shepherd-requirement mcron-configuration-jobs mcron-configuration-log? mcron-configuration-log-file @@ -58,6 +59,9 @@ (define-module (gnu services mcron) (define list-of-gexps? (list-of gexp?)) +(define list-of-symbols? + (list-of symbol?)) + (define-maybe/no-serialization string) (define-configuration/no-serialization mcron-configuration @@ -65,6 +69,11 @@ (define-configuration/no-serialization mcron-configuration (file-like mcron) "The mcron package to use.") + (shepherd-requirement + (list-of-symbols '()) + "This is a list of symbols naming Shepherd services that this service +will depend on.") + (jobs (list-of-gexps '()) "This is a list of gexps (@pxref{G-Expressions}), where each gexp @@ -158,13 +167,13 @@ (define (shepherd-schedule-action mcron files) (define (mcron-shepherd-services config) (match-record config - (mcron jobs log? log-file log-format date-format) + (mcron shepherd-requirement jobs log? log-file log-format date-format) (if (eq? jobs '()) '() ;nothing to do (let ((files (job-files mcron jobs))) (list (shepherd-service (provision '(mcron)) - (requirement '(user-processes)) + (requirement `(user-processes ,@shepherd-requirement)) (modules `((srfi srfi-1) (srfi srfi-26) (ice-9 popen) ;for the 'schedule' action -- 2.39.1 From debbugs-submit-bounces@debbugs.gnu.org Thu Mar 30 10:34:37 2023 Received: (at 62465) by debbugs.gnu.org; 30 Mar 2023 14:34:37 +0000 Received: from localhost ([127.0.0.1]:59176 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1phtML-00012S-9R for submit@debbugs.gnu.org; Thu, 30 Mar 2023 10:34:37 -0400 Received: from smtpm5.myservices.hosting ([185.26.105.236]:49584) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1phtMH-00012F-T6 for 62465@debbugs.gnu.org; Thu, 30 Mar 2023 10:34:35 -0400 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpm5.myservices.hosting (Postfix) with ESMTP id 6C638203B5; Thu, 30 Mar 2023 16:34:32 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id 678A7800A0; Thu, 30 Mar 2023 16:16:08 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id pI2fWCQh3Pcx; Thu, 30 Mar 2023 16:16:07 +0200 (CEST) Received: from guix-nuc.home.arpa (unknown [10.192.1.83]) (Authenticated sender: lumen@makinata.eu) by mail1.netim.hosting (Postfix) with ESMTPSA id A79048009C; Thu, 30 Mar 2023 16:16:07 +0200 (CEST) From: Bruno Victal To: 62465@debbugs.gnu.org Subject: [PATCH v3 2/2] services: mcron: Add instance name support for mcron. Date: Thu, 30 Mar 2023 15:15:19 +0100 Message-Id: <090d1b4795f68fd814c89e830acbc9064bdbb648.1680185251.git.mirai@makinata.eu> X-Mailer: git-send-email 2.39.1 In-Reply-To: <4427884b06f47c6152b35e9559e6c1dc9412ebe5.1680185251.git.mirai@makinata.eu> References: <4427884b06f47c6152b35e9559e6c1dc9412ebe5.1680185251.git.mirai@makinata.eu> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 62465 Cc: Bruno Victal , maxim.cournoyer@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Allow running more than one mcron instance. Make log-file a mandatory field when instantiating mcron-configuration records. Follow-up to . * gnu/services/mcron.scm (mcron-configuration)[instance-name]: New field. [log-file]: Update description. Remove default value. (mcron-shepherd-services): Implement instance-name support. Set the default service instantiation to log to /var/log/mcron.log. * gnu/tests/base.scm (%mcron-os): Update tests. * doc/guix.texi (Scheduled Job Execution): Update it. --- Notable changes from v2 to v3: Changing the final log-file value used in v2 behind the scenes made it poorly reflexive as you couldn't trust what the accessors returned. v3 makes log-file a mandatory field that has to be set manually and leaves the default service instantiation responsible for setting the default log-file that is used for the main mcron instance. doc/guix.texi | 32 ++++++++++++++++++++++++++++++-- gnu/services/mcron.scm | 28 ++++++++++++++++++++++------ gnu/tests/base.scm | 4 +++- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 5a597cf122..b9bd78f3cc 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -19383,6 +19383,10 @@ Scheduled Job Execution This is a list of symbols naming Shepherd services that this service will depend on. +@item @code{instance} (type: maybe-symbol) +Set the shepherd service name to @code{mcron-@var{instance}}. This is +useful when you want to have more than one mcron instance. + @item @code{jobs} (default: @code{()}) (type: list-of-gexps) This is a list of gexps (@pxref{G-Expressions}), where each gexp corresponds to an mcron job specification (@pxref{Syntax, mcron job @@ -19391,8 +19395,10 @@ Scheduled Job Execution @item @code{log?} (default: @code{#t}) (type: boolean) Log messages to standard output. -@item @code{log-file} (default: @code{"/var/log/mcron.log"}) (type: string) -Log file location. +@item @code{log-file} (type: string) +Log file location. By default, the main mcron instance (which is +instantiated with @samp{(service mcron-service-type)}) is set to log to +@file{/var/log/mcron.log}. @item @code{log-format} (default: @code{"~1@@*~a ~a: ~a~%"}) (type: string) @code{(ice-9 format)} format string for log messages. The default value @@ -19407,6 +19413,28 @@ Scheduled Job Execution @end deftp @c %end of fragment +Occasionally, it is desirable to run another mcron instance to separate +some of the jobs from the main mcron instance for clarity purposes, or if +the jobs are very chatty and frequent. (for example, a heartbeat check +every 30 seconds) + +The example below shows how an extra mcron service can be defined. +@lisp +(use (guix) + (guix records) + (gnu services) + (gnu services mcron)) + +(define secondary-mcron-service-type + (service-type + (inherit mcron-service-type) + (name 'mcron-secondary) + (default-value + (mcron-configuration + (instance 'secondary) + (log-file "/var/log/mcron-secondary.log"))))) +@end lisp + @node Log Rotation @subsection Log Rotation diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 99eb0edd60..164ef0e723 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -27,12 +27,14 @@ (define-module (gnu services mcron) #:use-module (guix records) #:use-module (guix gexp) #:use-module (srfi srfi-1) + #:use-module (ice-9 format) #:use-module (ice-9 match) #:use-module (ice-9 vlist) #:export (mcron-configuration mcron-configuration? mcron-configuration-mcron mcron-configuration-shepherd-requirement + mcron-configuration-instance mcron-configuration-jobs mcron-configuration-log? mcron-configuration-log-file @@ -63,6 +65,7 @@ (define list-of-symbols? (list-of symbol?)) (define-maybe/no-serialization string) +(define-maybe/no-serialization symbol) (define-configuration/no-serialization mcron-configuration (mcron @@ -74,6 +77,11 @@ (define-configuration/no-serialization mcron-configuration "This is a list of symbols naming Shepherd services that this service will depend on.") + (instance + maybe-symbol + "Set the shepherd service name to @code{mcron-@var{instance}}. +This is useful when you want to have more than one mcron instance.") + (jobs (list-of-gexps '()) "This is a list of gexps (@pxref{G-Expressions}), where each gexp @@ -85,8 +93,10 @@ (define-configuration/no-serialization mcron-configuration "Log messages to standard output.") (log-file - (string "/var/log/mcron.log") - "Log file location.") + string + "Log file location. By default, the main mcron instance +(which is instantiated with @samp{(service mcron-service-type)}) +is set to log to @file{/var/log/mcron.log}.") (log-format (string "~1@*~a ~a: ~a~%") @@ -167,12 +177,16 @@ (define (shepherd-schedule-action mcron files) (define (mcron-shepherd-services config) (match-record config - (mcron shepherd-requirement jobs log? log-file log-format date-format) + (mcron shepherd-requirement instance + jobs log? log-file log-format date-format) (if (eq? jobs '()) '() ;nothing to do - (let ((files (job-files mcron jobs))) + (let* ((files (job-files mcron jobs)) + (instance-name + (format #f "mcron~@[-~a~]" (maybe-value instance))) + (service-name (string->symbol instance-name))) (list (shepherd-service - (provision '(mcron)) + (provision (list service-name)) (requirement `(user-processes ,@shepherd-requirement)) (modules `((srfi srfi-1) (srfi srfi-26) @@ -220,7 +234,9 @@ (define mcron-service-type (inherit config) (jobs (append (mcron-configuration-jobs config) jobs))))) - (default-value (mcron-configuration)))) ;empty job list + (default-value + (mcron-configuration + (log-file "/var/log/mcron.log"))))) ;empty job list ;;; diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index 97edbbc6ad..ffff713e4c 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm @@ -885,7 +885,9 @@ (define %mcron-os "touch witness-touch"))) (simple-operating-system (service mcron-service-type - (mcron-configuration (jobs (list job1 job2 job3))))))) + (mcron-configuration + (jobs (list job1 job2 job3)) + (log-file "/var/log/mcron.log")))))) (define (run-mcron-test name) (define os -- 2.39.1 From debbugs-submit-bounces@debbugs.gnu.org Sat Apr 01 13:36:10 2023 Received: (at 62465) by debbugs.gnu.org; 1 Apr 2023 17:36:10 +0000 Received: from localhost ([127.0.0.1]:38540 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pif98-0000zb-H5 for submit@debbugs.gnu.org; Sat, 01 Apr 2023 13:36:10 -0400 Received: from smtpmciv3.myservices.hosting ([185.26.107.239]:39432) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pif96-0000zS-05 for 62465@debbugs.gnu.org; Sat, 01 Apr 2023 13:36:10 -0400 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpmciv3.myservices.hosting (Postfix) with ESMTP id A4BE220861; Sat, 1 Apr 2023 19:36:06 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id 52DF380098; Sat, 1 Apr 2023 19:36:06 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id u-OpSAsE2Kpd; Sat, 1 Apr 2023 19:36:05 +0200 (CEST) Received: from guix-nuc.home.arpa (unknown [10.192.1.83]) (Authenticated sender: lumen@makinata.eu) by mail1.netim.hosting (Postfix) with ESMTPSA id 9EF1B80097; Sat, 1 Apr 2023 19:36:05 +0200 (CEST) From: Bruno Victal To: 62465@debbugs.gnu.org Subject: [PATCH v4 1/3] services: mcron: Add 'shepherd-requirement' field. Date: Sat, 1 Apr 2023 18:35:53 +0100 Message-Id: X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 62465 Cc: Bruno Victal , maxim.cournoyer@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) * gnu/services/mcron.scm (mcron-configuration)[shepherd-requirement]: New field. (list-of-symbols?): New predicate. (mcron-shepherd-services): Add support for additional shepherd requirements. * doc/guix.texi (Scheduled Job Execution): Update it. --- Notable changes since v3: * Implemented adjustable user, group and supplementary groups for mcron service. These are especially useful when configuring multiple instances. This also aligns with upstream recommendation to run multiple mcron instances with lesser privileged accounts. Quoting mcron commit 0fe4d2cc9544d24ecc3e74a2d92433e01b9e25c6: > I don't believe that anyone should be running system-wide cron processes these > days (the attack surface is rather large), but should use separate per-user or > per-service mcron daemon processes. Tested with 'make check-system TESTS=mcron'. doc/guix.texi | 4 ++++ gnu/services/mcron.scm | 13 +++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index a58ea8f9ec..56aa86118a 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -19379,6 +19379,10 @@ Scheduled Job Execution @item @code{mcron} (default: @code{mcron}) (type: file-like) The mcron package to use. +@item @code{shepherd-requirement} (default: @code{()}) (type: list-of-symbols) +This is a list of symbols naming Shepherd services that this service +will depend on. + @item @code{jobs} (default: @code{()}) (type: list-of-gexps) This is a list of gexps (@pxref{G-Expressions}), where each gexp corresponds to an mcron job specification (@pxref{Syntax, mcron job diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 2ef5980e09..99eb0edd60 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -32,6 +32,7 @@ (define-module (gnu services mcron) #:export (mcron-configuration mcron-configuration? mcron-configuration-mcron + mcron-configuration-shepherd-requirement mcron-configuration-jobs mcron-configuration-log? mcron-configuration-log-file @@ -58,6 +59,9 @@ (define-module (gnu services mcron) (define list-of-gexps? (list-of gexp?)) +(define list-of-symbols? + (list-of symbol?)) + (define-maybe/no-serialization string) (define-configuration/no-serialization mcron-configuration @@ -65,6 +69,11 @@ (define-configuration/no-serialization mcron-configuration (file-like mcron) "The mcron package to use.") + (shepherd-requirement + (list-of-symbols '()) + "This is a list of symbols naming Shepherd services that this service +will depend on.") + (jobs (list-of-gexps '()) "This is a list of gexps (@pxref{G-Expressions}), where each gexp @@ -158,13 +167,13 @@ (define (shepherd-schedule-action mcron files) (define (mcron-shepherd-services config) (match-record config - (mcron jobs log? log-file log-format date-format) + (mcron shepherd-requirement jobs log? log-file log-format date-format) (if (eq? jobs '()) '() ;nothing to do (let ((files (job-files mcron jobs))) (list (shepherd-service (provision '(mcron)) - (requirement '(user-processes)) + (requirement `(user-processes ,@shepherd-requirement)) (modules `((srfi srfi-1) (srfi srfi-26) (ice-9 popen) ;for the 'schedule' action -- 2.39.1 From debbugs-submit-bounces@debbugs.gnu.org Sat Apr 01 13:37:20 2023 Received: (at 62465) by debbugs.gnu.org; 1 Apr 2023 17:37:20 +0000 Received: from localhost ([127.0.0.1]:38544 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pifAG-00011V-0F for submit@debbugs.gnu.org; Sat, 01 Apr 2023 13:37:20 -0400 Received: from smtpmciv1.myservices.hosting ([185.26.107.237]:47650) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pifAE-00011N-BO for 62465@debbugs.gnu.org; Sat, 01 Apr 2023 13:37:19 -0400 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpmciv1.myservices.hosting (Postfix) with ESMTP id 7C0A720D4B; Sat, 1 Apr 2023 19:37:17 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id 20D4A8009D; Sat, 1 Apr 2023 19:37:17 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id G7hG83HLpm6z; Sat, 1 Apr 2023 19:37:16 +0200 (CEST) Received: from guix-nuc.home.arpa (unknown [10.192.1.83]) (Authenticated sender: lumen@makinata.eu) by mail1.netim.hosting (Postfix) with ESMTPSA id 4A28F8009B; Sat, 1 Apr 2023 19:37:16 +0200 (CEST) From: Bruno Victal To: 62465@debbugs.gnu.org Subject: [PATCH v4 2/3] services: mcron: Add instance name support for mcron. Date: Sat, 1 Apr 2023 18:35:54 +0100 Message-Id: <32221c49b24430902cbd0b7881a26e8a813ec871.1680370145.git.mirai@makinata.eu> X-Mailer: git-send-email 2.39.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 62465 Cc: Bruno Victal , maxim.cournoyer@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Allow running more than one mcron instance. Make log-file a mandatory field when instantiating mcron-configuration records. Follow-up to . * gnu/services/mcron.scm (mcron-configuration)[instance-name]: New field. [log-file]: Update description. Remove default value. (mcron-shepherd-services): Implement instance-name support. Set the default service instantiation to log to /var/log/mcron.log. * gnu/tests/base.scm (%mcron-os): Update tests. * doc/guix.texi (Scheduled Job Execution): Update it. --- doc/guix.texi | 32 ++++++++++++++++++++++++++++++-- gnu/services/mcron.scm | 28 ++++++++++++++++++++++------ gnu/tests/base.scm | 4 +++- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 56aa86118a..e2781cb439 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -19383,6 +19383,10 @@ Scheduled Job Execution This is a list of symbols naming Shepherd services that this service will depend on. +@item @code{instance} (type: maybe-symbol) +Set the shepherd service name to @code{mcron-@var{instance}}. This is +useful when you want to have more than one mcron instance. + @item @code{jobs} (default: @code{()}) (type: list-of-gexps) This is a list of gexps (@pxref{G-Expressions}), where each gexp corresponds to an mcron job specification (@pxref{Syntax, mcron job @@ -19391,8 +19395,10 @@ Scheduled Job Execution @item @code{log?} (default: @code{#t}) (type: boolean) Log messages to standard output. -@item @code{log-file} (default: @code{"/var/log/mcron.log"}) (type: string) -Log file location. +@item @code{log-file} (type: string) +Log file location. By default, the main mcron instance (which is +instantiated with @samp{(service mcron-service-type)}) is set to log to +@file{/var/log/mcron.log}. @item @code{log-format} (default: @code{"~1@@*~a ~a: ~a~%"}) (type: string) @code{(ice-9 format)} format string for log messages. The default value @@ -19407,6 +19413,28 @@ Scheduled Job Execution @end deftp @c %end of fragment +Occasionally, it is desirable to run another mcron instance to separate +some of the jobs from the main mcron instance for clarity purposes, or if +the jobs are very chatty and frequent. (for example, a heartbeat check +every 30 seconds) + +The example below shows how an extra mcron service can be defined. +@lisp +(use (guix) + (guix records) + (gnu services) + (gnu services mcron)) + +(define secondary-mcron-service-type + (service-type + (inherit mcron-service-type) + (name 'mcron-secondary) + (default-value + (mcron-configuration + (instance 'secondary) + (log-file "/var/log/mcron-secondary.log"))))) +@end lisp + @node Log Rotation @subsection Log Rotation diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 99eb0edd60..164ef0e723 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -27,12 +27,14 @@ (define-module (gnu services mcron) #:use-module (guix records) #:use-module (guix gexp) #:use-module (srfi srfi-1) + #:use-module (ice-9 format) #:use-module (ice-9 match) #:use-module (ice-9 vlist) #:export (mcron-configuration mcron-configuration? mcron-configuration-mcron mcron-configuration-shepherd-requirement + mcron-configuration-instance mcron-configuration-jobs mcron-configuration-log? mcron-configuration-log-file @@ -63,6 +65,7 @@ (define list-of-symbols? (list-of symbol?)) (define-maybe/no-serialization string) +(define-maybe/no-serialization symbol) (define-configuration/no-serialization mcron-configuration (mcron @@ -74,6 +77,11 @@ (define-configuration/no-serialization mcron-configuration "This is a list of symbols naming Shepherd services that this service will depend on.") + (instance + maybe-symbol + "Set the shepherd service name to @code{mcron-@var{instance}}. +This is useful when you want to have more than one mcron instance.") + (jobs (list-of-gexps '()) "This is a list of gexps (@pxref{G-Expressions}), where each gexp @@ -85,8 +93,10 @@ (define-configuration/no-serialization mcron-configuration "Log messages to standard output.") (log-file - (string "/var/log/mcron.log") - "Log file location.") + string + "Log file location. By default, the main mcron instance +(which is instantiated with @samp{(service mcron-service-type)}) +is set to log to @file{/var/log/mcron.log}.") (log-format (string "~1@*~a ~a: ~a~%") @@ -167,12 +177,16 @@ (define (shepherd-schedule-action mcron files) (define (mcron-shepherd-services config) (match-record config - (mcron shepherd-requirement jobs log? log-file log-format date-format) + (mcron shepherd-requirement instance + jobs log? log-file log-format date-format) (if (eq? jobs '()) '() ;nothing to do - (let ((files (job-files mcron jobs))) + (let* ((files (job-files mcron jobs)) + (instance-name + (format #f "mcron~@[-~a~]" (maybe-value instance))) + (service-name (string->symbol instance-name))) (list (shepherd-service - (provision '(mcron)) + (provision (list service-name)) (requirement `(user-processes ,@shepherd-requirement)) (modules `((srfi srfi-1) (srfi srfi-26) @@ -220,7 +234,9 @@ (define mcron-service-type (inherit config) (jobs (append (mcron-configuration-jobs config) jobs))))) - (default-value (mcron-configuration)))) ;empty job list + (default-value + (mcron-configuration + (log-file "/var/log/mcron.log"))))) ;empty job list ;;; diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm index 97edbbc6ad..ffff713e4c 100644 --- a/gnu/tests/base.scm +++ b/gnu/tests/base.scm @@ -885,7 +885,9 @@ (define %mcron-os "touch witness-touch"))) (simple-operating-system (service mcron-service-type - (mcron-configuration (jobs (list job1 job2 job3))))))) + (mcron-configuration + (jobs (list job1 job2 job3)) + (log-file "/var/log/mcron.log")))))) (define (run-mcron-test name) (define os -- 2.39.1 From debbugs-submit-bounces@debbugs.gnu.org Sat Apr 01 13:44:36 2023 Received: (at 62465) by debbugs.gnu.org; 1 Apr 2023 17:44:36 +0000 Received: from localhost ([127.0.0.1]:38548 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pifHI-0001Ci-6F for submit@debbugs.gnu.org; Sat, 01 Apr 2023 13:44:36 -0400 Received: from smtpmciv3.myservices.hosting ([185.26.107.239]:40988) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pifHG-0001Ca-DM for 62465@debbugs.gnu.org; Sat, 01 Apr 2023 13:44:34 -0400 Received: from mail1.netim.hosting (unknown [185.26.106.173]) by smtpmciv3.myservices.hosting (Postfix) with ESMTP id 7EAEF205DB; Sat, 1 Apr 2023 19:44:33 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail1.netim.hosting (Postfix) with ESMTP id 47C8E8009B; Sat, 1 Apr 2023 19:37:17 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail1.netim.hosting Received: from mail1.netim.hosting ([127.0.0.1]) by localhost (mail1-2.netim.hosting [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id dTfXb07MRUlK; Sat, 1 Apr 2023 19:37:17 +0200 (CEST) Received: from guix-nuc.home.arpa (unknown [10.192.1.83]) (Authenticated sender: lumen@makinata.eu) by mail1.netim.hosting (Postfix) with ESMTPSA id AF11C8009C; Sat, 1 Apr 2023 19:37:16 +0200 (CEST) From: Bruno Victal To: 62465@debbugs.gnu.org Subject: [PATCH v4 3/3] services: mcron: Add user-name, user-group and supplementary-groups fields. Date: Sat, 1 Apr 2023 18:35:55 +0100 Message-Id: X-Mailer: git-send-email 2.39.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 62465 Cc: Bruno Victal , maxim.cournoyer@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Allows mcron to be launched with a different user. This is especially useful when configuring multiple instances. * gnu/services/mcron.scm (mcron-configuration)[user, group, supplementary-groups]: New field. (list-of-user-groups?): New predicate. (mcron-shepherd-services): Use newly added fields. * doc/guix.texi (Scheduled Job Execution): Update it. --- doc/guix.texi | 9 +++++++++ gnu/services/mcron.scm | 31 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/doc/guix.texi b/doc/guix.texi index e2781cb439..1819e1386c 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -19387,6 +19387,15 @@ Scheduled Job Execution Set the shepherd service name to @code{mcron-@var{instance}}. This is useful when you want to have more than one mcron instance. +@item @code{user} (type: maybe-user-account) +Owner of the @command{mcron} process. + +@item @code{group} (type: maybe-user-group) +Owner group of the @command{mcron} process. + +@item @code{supplementary-groups} (type: maybe-list-of-user-groups) +List of supplementary groups of the @command{mcron} process. + @item @code{jobs} (default: @code{()}) (type: list-of-gexps) This is a list of gexps (@pxref{G-Expressions}), where each gexp corresponds to an mcron job specification (@pxref{Syntax, mcron job diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index 164ef0e723..b4e28fc65d 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -23,6 +23,7 @@ (define-module (gnu services mcron) #:use-module (gnu services configuration) #:use-module (gnu services shepherd) #:use-module (gnu packages guile-xyz) + #:use-module (gnu system accounts) #:use-module (guix deprecation) #:use-module (guix records) #:use-module (guix gexp) @@ -64,8 +65,14 @@ (define list-of-gexps? (define list-of-symbols? (list-of symbol?)) +(define list-of-user-groups? + (list-of user-group?)) + (define-maybe/no-serialization string) (define-maybe/no-serialization symbol) +(define-maybe/no-serialization user-account) +(define-maybe/no-serialization user-group) +(define-maybe/no-serialization list-of-user-groups) (define-configuration/no-serialization mcron-configuration (mcron @@ -82,6 +89,18 @@ (define-configuration/no-serialization mcron-configuration "Set the shepherd service name to @code{mcron-@var{instance}}. This is useful when you want to have more than one mcron instance.") + (user + maybe-user-account + "Owner of the @command{mcron} process.") + + (group + maybe-user-group + "Owner group of the @command{mcron} process.") + + (supplementary-groups + maybe-list-of-user-groups + "List of supplementary groups of the @command{mcron} process.") + (jobs (list-of-gexps '()) "This is a list of gexps (@pxref{G-Expressions}), where each gexp @@ -178,6 +197,7 @@ (define (shepherd-schedule-action mcron files) (define (mcron-shepherd-services config) (match-record config (mcron shepherd-requirement instance + user group supplementary-groups jobs log? log-file log-format date-format) (if (eq? jobs '()) '() ;nothing to do @@ -204,6 +224,17 @@ (define (mcron-shepherd-services config) '())) '()) #$@files) + #$@(if (maybe-value-set? user) + `(#:user ,(user-account-name user)) + '()) + #$@(if (maybe-value-set? group) + `(#:group ,(user-group-name group)) + '()) + #$@(if (maybe-value-set? supplementary-groups) + `(#:supplementary-groups + ,#~'#$(map user-group-name + supplementary-groups)) + '()) ;; Disable auto-compilation of the job files and ;; set a sane value for 'PATH'. -- 2.39.1