Après avoir débogué cela, j'ai trouvé la solution.
La cause première de ce problème réside dans le fait que sous Ubuntu 16.04 et plus récent, les mises à niveau sans assistance utilisent systemd - pas cron - pour planifier les mises à jour avec un énorme retard aléatoire:
/lib/systemd/system/apt-daily.timer
est configuré avec
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Cela signifie qu'il fonctionnera deux fois par jour, à 6h00 et 18h00, avec un retard aléatoire pouvant aller jusqu'à 12 heures. Comme ce n'est pas toujours acceptable pour les environnements de production, j'ai dû remplacer ces paramètres.
Afin de garder les fichiers de configuration du package intacts, j'ai défini mon remplacement dans /etc/systemd/system/apt-daily.timer.d/override.conf
( Mise à jour : veuillez lire la modification au bas de cette réponse pour plus d'informations sur le nom et l'emplacement du fichier, car il semble être légèrement sujet à changement).
Là je mets
[Timer]
OnCalendar=
OnCalendar=06:00
RandomizedDelaySec=1h
pour que les mises à niveau sans assistance s'exécutent à 6h00, plus un délai aléatoire pouvant aller jusqu'à une heure.
Ensuite, j'ai simplement redémarré le minuteur avec systemctl restart apt-daily.timer
(éventuellement besoin de recharger le démon).
Les mises à jour sans assistance s'exécutent à nouveau à des moments prévisibles!
Edit : Il semblerait que pour Ubuntu 18.04, les choses aient un peu changé. Le remplacement doit maintenant être stocké dans /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
et ressembler à ceci:
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=1h
@PerlDuck a mentionné un moyen de créer un fichier de remplacement avec le bon nom et l'emplacement dans un commentaire ci-dessous. Au lieu de créer manuellement un fichier, pensez à exécutersudo systemctl edit apt-daily.timer