
Configurei atualizações autônomas para instalar pacotes de segurança e notificar por e-mail quando isso acontecer.
Percebi que a instalação acontece em momentos muito aleatórios. Eu sei que as versões mais recentes adicionaram um atraso aleatório de até 30 minutos a partir do tempo de execução do cron.daily.
No entanto, os atrasos que estou enfrentando são muito maiores do que isso. Vejo atualizações autônomas sendo executadas às 9h, 15h, 12h... Os logs mostram o mesmo, então não é apenas a entrega do e-mail que demora mais.
A tarefa de atualização autônoma é a primeira no cron.daily, o que significa que não há nenhuma tarefa anterior com grandes tempos de execução.
Alguém experimentou algo semelhante?
Responder1
Depois de depurar isso, encontrei a solução.
A causa raiz desse problema reside no fato de que no Ubuntu 16.04 e mais recente, as atualizações autônomas usam o systemd - e não o cron - para agendar as atualizações com um enorme atraso aleatório:
/lib/systemd/system/apt-daily.timer
está configurado com
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Isso significa que funcionará duas vezes ao dia, às 6h e às 18h, com atraso aleatório de até 12 horas. Como isso nem sempre é aceitável para ambientes de produção, tive que substituir essas configurações.
Para manter os arquivos de configuração do pacote intactos, defini minha substituição em/etc/systemd/system/apt-daily.timer.d/override.conf
(Atualizar: leia a edição no final desta resposta para obter mais informações sobre o nome do arquivo e a localização, pois parece estar ligeiramente sujeito a alterações).
Aí eu coloquei
[Timer]
OnCalendar=
OnCalendar=06:00
RandomizedDelaySec=1h
para que as atualizações autônomas sejam executadas às 6h, mais um atraso aleatório de até uma hora.
Então simplesmente reiniciei o cronômetro systemctl restart apt-daily.timer
(eventualmente preciso recarregar o daemon).
As atualizações autônomas agora são executadas em horários previsíveis novamente!
Editar: Parece que no Ubuntu 18.04 as coisas mudaram um pouco. A substituição agora deve ser armazenada em/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
e fique assim:
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=1h
@PerlDuck mencionou uma maneira de criar um arquivo de substituição com o nome e local corretos em um comentário abaixo. Em vez de criar um arquivo manualmente, considere executarsudo systemctl edit apt-daily.timer
Responder2
A melhor maneira de atualizar o tempo de atualização autônoma, conforme eu o compilei de várias fontes e testei em nosso sistema, éuse exclusivamente os systemctl
comandose evite tentar encontrar os arquivos adequados para editar.
A única coisa que você precisa saber com certeza é o nome do serviço, que no nosso caso éapt-daily-upgrade
(se não tiver certeza, procure por $ systemctl | grep apt
). Quando um serviço systemd tem um timer definido, ele é referenciado como #{service_name}.timer
, portanto é apt-daily-upgrade.timer
para nós.
Como a configuração do sistema não deve ser editada, teremos quesubstituir a configuração do temporizador padrãono sistema. Para isso você precisa editar algumas partes da configuração original, então vamos mostrar primeiro:
$ 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
Precisaremos atualizar os valores OnCalendar
e RandomizedDelaySec
na [Timer]
seção. Vamos criar o arquivo de configuração de substituição por meio do seguinte comando:
$ systemctl edit apt-daily-upgrade.timer
Isso deverá abrir um editor com um arquivo em branco e precisamos colocar lá a [Timer]
seção alterada, pelo 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 você pode ver, atualizamos o OnCalendar
valor para acionar as atualizações automáticas à noite, em vez de pela manhã. A OnCalendar
linha em branco acima deve estar presente comoeste valor de configuração éaditivo, ou seja, pode ser especificado mais de uma vez e apenas defini-lo com um valor em branco redefine todos OnCalendar
os valores anteriores (aqueles da configuração do sistema).
Depois de salvar o arquivo, podemos verificar se o systemd sabe disso (não há necessidade de executar systemctl daemon-reload
, o edit
comando faz isso para nós ao sair do editor) executando systemctl
novamente como acima:
$ 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
Agora ele mostra duas configurações, com a nossa personalizada substituindo a padrão. Bom!
A verificação final de que tudo funciona conforme o esperado pode ser feita através do list-timers
comando 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
...
Encontre a linha adequada na saída e observe a NEXT
coluna - o valor ali deve refletir o horário da atualização autônoma recém-configurada.
Responder3
A documentação oficial do debian emhttps://wiki.debian.org/UnattendedUpgradesatualmente contém um erro que está enganando muitas pessoas. Ele afirma que você pode substituir o tempo de atualização criando um arquivo chamado
/etc/systemd/system/apt-daily-upgrade.d/override.conf
Porém o caminho correto é
/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
Responder4
Oapt-daily.timerestá configurado para ser executado duas vezes por dia e não interromperá o ambiente de produção, pois simplesmente atualiza e baixa os pacotes que precisam ser atualizados. Você só precisa substituirapt-daily-upgrade.timerpara um momento que teria menos probabilidade de impactar seu ambiente de produção, pois é quando as atualizações são realmente instaladas. Além disso, há uma configuração para reinicializar para coisas que exigem isso em 50 atualizações autônomas que você deve considerar configurar para que sejam realmente aplicadas e que também tenha um cronômetro. Além disso, a partir de 22.04, o cronômetro de atualização foi alterado para o padrão 6h + 1h, então a maioria não precisará alterar isso.