From b0421cc964ce11c1e43da5ad2a8e31205539737c Mon Sep 17 00:00:00 2001 From: Richard Sent Date: Tue, 3 Dec 2024 18:28:13 -0500 Subject: [PATCH] services: admin: Improve use of unattended-upgrade reboot? field. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This ensures the unattended upgrade job successfully reboots regardless of the value for services-to-restart. Previously the mcron service may be restarted which would halt script execution before the system rebooted. * gnu/services/admin.scm (unattended-upgrade-mcron-jobs): Do not restart services when reboot? is #t. * doc/guix.texi (Unattended Upgrades): Document it. Change-Id: I8e486a764ec1dc5c3090130cc447a0cc3f5a2e00 Signed-off-by: Ludovic Courtès --- doc/guix.texi | 4 ++++ gnu/services/admin.scm | 10 ++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 43aa1ad71a..a2915de954 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -23337,6 +23337,10 @@ system to use for the upgrade. If no value is provided the This field specifies whether the system should reboot after completing an unattended upgrade. +When @code{reboot?} is @code{#t}, services are not restarted before +rebooting. This means that the value for @code{services-to-restart} is +ignored. The updated services will be started after the system reboots. + @item @code{services-to-restart} (default: @code{'(mcron)}) This field specifies the Shepherd services to restart when the upgrade completes. diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm index 4882883878..24ff659a01 100644 --- a/gnu/services/admin.scm +++ b/gnu/services/admin.scm @@ -512,11 +512,13 @@ (define (alarm-handler . _) #$(string-append (number->string expiration) "s"))) - (format #t "~a restarting services...~%" (timestamp)) - (for-each restart-service '#$services) + (unless #$reboot? + ;; Rebooting effectively restarts services anyway and execution + ;; would be halted here if mcron is restarted. + (format #t "~a restarting services...~%" (timestamp)) + (for-each restart-service '#$services)) - ;; XXX: If 'mcron' has been restarted, perhaps this isn't - ;; reached. + ;; XXX: If 'mcron' has been restarted, this is not reached. (format #t "~a upgrade complete~%" (timestamp)) ;; Stopping the root shepherd service triggers a reboot.