Ubuntu 16.04: las actualizaciones desatendidas se ejecutan en momentos aleatorios

Ubuntu 16.04: las actualizaciones desatendidas se ejecutan en momentos aleatorios

He configurado actualizaciones desatendidas para instalar paquetes de seguridad y notificar por correo cuando lo haga.

He notado que la instalación ocurre en momentos muy aleatorios. Sé que las últimas versiones agregaron un retraso aleatorio de hasta 30 minutos a partir del tiempo de ejecución de cron.daily.

Sin embargo, los retrasos que estoy experimentando son mucho mayores que eso. Veo actualizaciones desatendidas ejecutándose a las 9 a.m., 3 p.m., 12 a.m.... Los registros muestran lo mismo, por lo que no es solo la entrega del correo electrónico lo que demora más.

La tarea de actualizaciones desatendidas es la primera en cron.daily, lo que significa que no hay ninguna tarea previa con tiempos de ejecución enormes.

¿Alguien experimentó algo similar?

Respuesta1

Después de depurar esto encontré la solución.

La causa principal de este problema reside en el hecho de que en Ubuntu 16.04 y versiones posteriores, las actualizaciones desatendidas utilizan systemd (no cron) para programar las actualizaciones con un enorme retraso aleatorio:

/lib/systemd/system/apt-daily.timerestá configurado con

OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h

Esto significa que funcionará dos veces al día, a las 6:00 y a las 18:00, con un retraso aleatorio de hasta 12 horas. Como esto no siempre es aceptable para entornos de producción, tuve que anular esta configuración.

Para mantener intactos los archivos de configuración del paquete, definí mi anulación en/etc/systemd/system/apt-daily.timer.d/override.conf(Actualizar: lea la edición al final de esta respuesta para obtener más información sobre el nombre del archivo y la ubicación, ya que parece estar ligeramente sujeto a cambios).

ahí me puse

[Timer]
OnCalendar=
OnCalendar=06:00
RandomizedDelaySec=1h

que las actualizaciones desatendidas se ejecuten a las 6:00 más un retraso aleatorio de hasta una hora.

Luego simplemente reinicié el temporizador systemctl restart apt-daily.timer(eventualmente tendré que recargar el demonio).

¡Las actualizaciones desatendidas ahora se ejecutan nuevamente en horarios predecibles!

Editar: Parecería que para Ubuntu 18.04 las cosas cambiaron un poco. La anulación ahora debería almacenarse en/etc/systemd/system/apt-daily-upgrade.timer.d/override.confy luce así:

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=1h

@PerlDuck mencionó una forma de crear un archivo de anulación con el nombre y la ubicación correctos en un comentario a continuación. En lugar de crear un archivo manualmente, considere ejecutarsudo systemctl edit apt-daily.timer

Respuesta2

La mejor manera de actualizar el tiempo de actualización desatendida, tal como lo compilé de varias fuentes y lo probé en nuestro sistema, esutilizar exclusivamente los systemctlcomandosy evite intentar encontrar los archivos adecuados para editar.

Lo único que tienes que saber con seguridad es el nombre del servicio, que en nuestro caso esapt-daily-upgrade(si no está seguro, búsquelo a través de $ systemctl | grep apt). Cuando un servicio systemd tiene un temporizador definido, se hace referencia a él como #{service_name}.timer, por lo que es apt-daily-upgrade.timerpara nosotros.

Como la configuración del sistema no debe editarse, tendremos queanular la configuración predeterminada del temporizadoren sistemad. Para esto necesitas copiar y editar algunas partes de la configuración original, así que mostrémoslas primero:

$ systemctl cat apt-daily-upgrade.timer 
# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

Necesitaremos actualizar los valores OnCalendary RandomizedDelaySecen la [Timer]sección. Creemos el archivo de configuración de anulación mediante el siguiente comando:

$ systemctl edit apt-daily-upgrade.timer

Esto debería abrir un editor con un archivo en blanco y debemos colocar allí la [Timer]sección modificada, al menos:

[Timer]
# Reset the system calendar config first
OnCalendar=
# Set a new calendar timer with a 60 minute threshold
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

Como puede ver, hemos actualizado el OnCalendarvalor para activar las actualizaciones automáticas por las tardes, en lugar de por las mañanas. La OnCalendarlínea en blanco encima debe estar presente comoeste valor de configuración esaditivo, es decir, se puede especificar más de una vez y solo establecerlo en un valor en blanco restablece todos OnCalendarlos valores anteriores (los de la configuración del sistema).

Una vez que guardamos el archivo, podemos verificar que systemd lo sabe (no es necesario ejecutarlo systemctl daemon-reload, el editcomando lo hace por nosotros al salir del editor) ejecutando systemctlnuevamente como se indica arriba:

$ systemctl cat apt-daily-upgrade.timer

# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

# /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer]
# Reset the system calendar config first
OnCalendar=
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

Ahora muestra dos configuraciones, y la personalizada anula la predeterminada. ¡Bien!

La comprobación final de que todo funciona como se esperaba se puede realizar mediante el list-timerscomando de systemctl:

$ systemctl list-timers
NEXT                        LEFT          LAST                        PASSED       UNIT                         ACTIVATES                     
...
Thu 2020-08-06 21:51:36 UTC 12h left      Thu 2020-08-06 07:10:20 UTC 2h 20min ago apt-daily-upgrade.timer      apt-daily-upgrade.service               
...             

Busque la línea adecuada en el resultado y observe la NEXTcolumna; el valor allí debe reflejar la hora de la actualización desatendida recién configurada.

Respuesta3

La documentación oficial de Debian sobrehttps://wiki.debian.org/UnattendedUpgradesActualmente tiene un error que está engañando a mucha gente. Afirma que puede anular el tiempo de actualización creando un archivo llamado

/etc/systemd/system/apt-daily-upgrade.d/override.conf

Sin embargo, el camino correcto es

/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf

Respuesta4

Elapt-diario.temporizadorestá configurado para ejecutarse dos veces al día y no interrumpirá un entorno de producción, ya que simplemente actualiza y descarga los paquetes que necesitan actualizarse. Sólo debería necesitar anularapt-actualización-diaria.temporizadora un momento en el que sería menos probable que afecte su entorno de producción, ya que es cuando realmente se instalan las actualizaciones. Además, hay una configuración para reiniciar para cosas que lo requieren en 50 actualizaciones desatendidas que deberías considerar configurar para que realmente se apliquen y que también tiene un temporizador. Además, a partir del 22.04, el temporizador de actualización se cambió al valor predeterminado de 6 a. m. + 1 hora, por lo que la mayoría no necesitará cambiar esto.

información relacionada