
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.timer
está 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.conf
y 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 systemctl
comandosy 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.timer
para 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 OnCalendar
y RandomizedDelaySec
en 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 OnCalendar
valor para activar las actualizaciones automáticas por las tardes, en lugar de por las mañanas. La OnCalendar
lí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 OnCalendar
los 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 edit
comando lo hace por nosotros al salir del editor) ejecutando systemctl
nuevamente 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-timers
comando 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 NEXT
columna; 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.