services: admin: Improve use of unattended-upgrade reboot? field.

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 <ludo@gnu.org>
This commit is contained in:
Richard Sent 2024-12-03 18:28:13 -05:00 committed by Ludovic Courtès
parent 89ed6e80bb
commit b0421cc964
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 10 additions and 4 deletions

View file

@ -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 This field specifies whether the system should reboot after completing
an unattended upgrade. 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)}) @item @code{services-to-restart} (default: @code{'(mcron)})
This field specifies the Shepherd services to restart when the upgrade This field specifies the Shepherd services to restart when the upgrade
completes. completes.

View file

@ -512,11 +512,13 @@ (define (alarm-handler . _)
#$(string-append (number->string expiration) #$(string-append (number->string expiration)
"s"))) "s")))
(unless #$reboot?
;; Rebooting effectively restarts services anyway and execution
;; would be halted here if mcron is restarted.
(format #t "~a restarting services...~%" (timestamp)) (format #t "~a restarting services...~%" (timestamp))
(for-each restart-service '#$services) (for-each restart-service '#$services))
;; XXX: If 'mcron' has been restarted, perhaps this isn't ;; XXX: If 'mcron' has been restarted, this is not reached.
;; reached.
(format #t "~a upgrade complete~%" (timestamp)) (format #t "~a upgrade complete~%" (timestamp))
;; Stopping the root shepherd service triggers a reboot. ;; Stopping the root shepherd service triggers a reboot.