guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Reproducer for failing shepherd startup


From: Felix Lechner
Subject: Re: Reproducer for failing shepherd startup
Date: Mon, 12 Aug 2024 15:43:05 -0700

Hi Attila,

On Tue, Jul 02 2024, Attila Lendvai wrote:

> i forgot to add that it's fixed

Okay, then there is still another problem.  I am unable to reconfigure
my systems via 'guix deploy' when a timer is enabled already.  I am
trying to add a second timer.

The command stalls with messages like this:

    The following derivations will be built:
      /gnu/store/11nlp3k2lq25ijb4m9x0mj7phprjx9f6-remote-exp.scm.drv
      
/gnu/store/b52aidm138l6nwk5wd7lr7ghk8x9n8bx-upgrade-shepherd-services.scm.drv
    
    building 
/gnu/store/b52aidm138l6nwk5wd7lr7ghk8x9n8bx-upgrade-shepherd-services.scm.drv...
    building /gnu/store/11nlp3k2lq25ijb4m9x0mj7phprjx9f6-remote-exp.scm.drv...
    guix deploy: sending 2 store items (0 MiB) to 
'wallace-server.us-core.com'...

The issue occurred for the two timers below, but I believe the issue is
unrelated to the type of timer or their order.

Attached is a low-res image of the console output.  I was unable to
capture the error in any other way.  Sorry to spam the list with 7kB.

Kind regards
Felix

* * *

(define (garbage-collector-shepherd-service config)
  (shepherd-service
   (provision '(garbage-collector))
   (requirement '(guix-daemon))
   (modules '((shepherd service timer)))
   (start #~(make-timer-constructor
             ;; Five minutes after midnight every day.
             (calendar-event #:hours '(0) #:minutes '(5))
             (command (list #$(file-append guix "/bin/guix")
                            "gc"
                            "--free-space=1G"))))
   (stop #~(make-timer-destructor))
   (actions
    (list (shepherd-action
           (name 'trigger)
           (documentation "Trigger the action associated with this timer.")
           (procedure #~(identity trigger-timer)))))
   (documentation "Maintain minimum free space by cleaning up Guix garbage")))

(define garbage-collector-service-type
  (service-type
   (name 'garbage-collector)
   (description
    "Maintain minimum free space by cleaning up Guix garbage")
   (extensions
    (list
     (service-extension shepherd-root-service-type
                        (compose list garbage-collector-shepherd-service))))
   (default-value #f)))

(define (mdadm-resync-shepherd-service config)
  (shepherd-service
   (provision '(mdadm-resync))
   (requirement '(file-systems user-processes))
   (modules '((ice-9 ftw)
              (ice-9 regex)
              (shepherd service timer)))
   (start #~(make-timer-constructor
             ;; Every first Sunday of the month at 1 AM.
             (calendar-event #:days-of-month '(1 2 3 4 5 6 7)
                             #:days-of-week '(sunday)
                             #:hours '(1))
             (lambda _
               ;; some helpers and error handling
               (define (info message)
                 (let ((timestamp (strftime "%Y-%m-%dT%H:%M:%S%zZ" (localtime 
(current-time)))))
                   (format (current-error-port) "~a ~a~%" timestamp message)))

               (define (resync array)
                 (let ((port (open-output-file (string-append "/sys/block/" 
array "/md/sync_action"))))
                   (display "check" port)
                   (close-port port))
                 (info (string-append "Started MD resync for " array ".")))

               (let* ((is-mdadm-device? (lambda (file)
                                          (string-match "^md.+" file)))
                      (arrays (scandir "/dev" is-mdadm-device?)))
                 (map resync arrays)))))
   (stop #~(make-timer-destructor))
   (actions
    (list (shepherd-action
           (name 'trigger)
           (documentation "Trigger the action associated with this timer.")
           (procedure #~(identity trigger-timer)))))
   (documentation "MD array resync")))

(define mdadm-resync-service-type
  (service-type
   (name 'mdadm-resync)
   (description "MD array resync")
   (extensions
    (list
     (service-extension shepherd-root-service-type
                        (compose list mdadm-resync-shepherd-service))))
   (default-value #f)))

Attachment: Shepherd Timers Reload Error Message.jpg
Description: Shepherd Timers Reload Error Message


reply via email to

[Prev in Thread] Current Thread [Next in Thread]