Ubuntu 16.04: Atualizações autônomas executadas em momentos aleatórios

15

Eu configurei atualizações autônomas para instalar pacotes de segurança e notificar por email 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 cron.daily.

No entanto, os atrasos que estou enfrentando são muito maiores que isso. Vejo atualizações autônomas sendo executadas às 9h, 15h, 12h ... Os logs mostram o mesmo, portanto, não é apenas a entrega de email que leva mais tempo.

A tarefa de atualizações autônomas é a primeira no cron.daily, o que significa que não há tarefa anterior com grandes tempos de execução.

Alguém experimentou uma coisa semelhante?

daniel f.
fonte
O comportamento aleatório é deliberado - atenuar a demanda em vez de milhões de sistemas martelando alguns espelhos nos mesmos horários todos os dias. Usuários comuns de desktop não devem perceber o comportamento. Alguns usuários corporativos desejam mudar o comportamento para algo um pouco mais previsível e certamente são bem-vindos.
user535733
Sim, a razão por trás dessa escolha é clara. Só que esse comportamento é inaceitável para sistemas de produção. No momento em que fiz essa pergunta, esse comportamento (e a correção) não estavam documentados em nenhum lugar
daniel f.

Respostas:

20

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 systemd - não cron - para agendar as atualizações com um grande atraso aleatório:

/lib/systemd/system/apt-daily.timer está configurado com

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

Isso significa que ele será executado duas vezes por dia, às 6:00 e 18:00, com um 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 intocados, defini minha substituição em /etc/systemd/system/apt-daily.timer.d/override.conf( Atualização : leia a edição na parte inferior desta resposta para obter mais informações sobre o nome do arquivo e o local, pois parece estar sujeito a alterações).

Lá eu coloco

[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.

Simplesmente reiniciei o timer com systemctl restart apt-daily.timer(eventualmente, preciso recarregar o daemon).

Atualizações autônomas agora são executadas em tempos previsíveis novamente!

Edit : Parece que para o Ubuntu 18.04 as coisas mudaram um pouco. A substituição agora deve ser armazenada /etc/systemd/system/apt-daily-upgrade.timer.d/override.confe ter a seguinte aparência:

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

O @PerlDuck mencionou uma maneira de criar um arquivo de substituição com o nome e o local corretos em um comentário abaixo. Em vez de criar um arquivo manualmente, considere executarsudo systemctl edit apt-daily.timer

daniel f.
fonte
1
Por que você limpa o OnCalendar primeiro?
Jarno
2
Porque, caso contrário, ele adicionaria apenas um novo cronômetro às 6h, deixando o existente também. Como quero que as atualizações autônomas sejam executadas SOMENTE às 6, preciso limpar a programação primeiro.
daniel f.
Eu adicionei "OnBootSec = 5min" para permitir a execução após a inicialização também, mas não funcionou. (também adicionado OnUnitActiveSec = 12h de modo que não é administrado muito frequentemente.)
jarno
systemd, ou melhor, a mentalidade systemd, ataca novamente. Talvez eu precise repensar a atualização para o Xenial Xerus em produção depois que essa gema me morder.
Joe
2
@daniel f. Eu tenho um arquivo apt-daily.timer em / lib / systemd / system /, bem como um em /etc/systemd/system/timers.target.wants/ No entanto, não tenho nenhum em / etc / systemd / system / como você. Você saberia se eu deveria criar o diretório apt-daily.timer.d e o override.conf em / lib / systemd / system? Todos os conselhos são agradecidos com thx.
Purvez
4

A documentação oficial do debian em https://wiki.debian.org/UnattendedUpgrades atualmente possui 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

No entanto, o caminho correto é

/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
Rolf Wojtech
fonte
1
Boa descoberta. IMHO a coisa mais segura é usar sudo systemctl edit apt-daily.timer. Isso abrirá um editor com o arquivo drop-in correto.
PerlDuck
2
Obrigado PerlDuck, eu editei a página Wiki do Debian com a sua sugestão
Rolf Wojtech
Votou esta resposta por ser útil - e por atualizar a página wiki da Debian!
Anthony Geoghegan
4

Tentei a solução de Daniel, mas a atualização ainda foi executada nos horários errados. Acontece que existem duas substituições systemd necessárias:

Usado para downloads

/lib/systemd/system/apt-daily.timer - substitua por /etc/systemd/system/apt-daily.timer.d/override.conf

Usado para atualização

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

Niels Rask
fonte
1
Em qual versão você está? Então você teve que substituir os dois temporizadores mencionados ao mesmo tempo?
daniel f.
Ubuntu 16.04.4 x64
Niels Rask