Como programar a atualização automática do yum para executar somente durante a noite?

4

Eu quero configurar o yum para atualizar automaticamente o sistema usando o yum-cron. Mas minha conexão com a Internet é muito limitada e eu não quero que o processo de atualização monitore a pequena quantidade de internet disponível e torne o uso do computador para todos na rede infeliz.

Como posso configurar o yum para verificar e baixar atualizações automaticamente, mas apenas entre as 2h e as 6h?

    
por Kenny Blankenship 05.11.2017 / 19:10

2 respostas

6

Bem, se fosse eu, eu configuraria um cron job (por root ) que começa às 2h todos os dias. Assim:

0 2 * * * /bin/yum -y update

É tão KISS que ele pode conseguir!

    
por 05.11.2017 / 20:16
3

Aqui está uma resposta curta. Execute o seguinte comando como usuário root:

cat <<HEREDOC > /etc/crontab.d/update-yum.crontab
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root
HOME=/
0 2 * * *  yum -y update
HEREDOC

Segue uma explicação detalhada.

Existem vários utilitários para executar trabalhos agendados em sistemas Unix:

O utilitário cron é o utilitário Unix padrão para a execução de tarefas agendadas. Uma desvantagem de cron é que a tarefa pode não ser executada se o sistema estiver inativo por algum motivo

O utilitário anacron foi criado para casos de uso nos quais o sistema host pode não estar ativo continuamente:

anacron is a computer program that performs periodic command scheduling, which is traditionally done by cron, but without assuming that the system is running continuously.

O utilitário fcron é uma versão mais recente que também foi projetada para lidar com esse tipo de situação:

fcron is a computer program [...] performs periodic command scheduling. [fcron] does not assume that the system is running continuously, and can run in systems that do not run all the time or regularly. It aims to replace Vixie-cron and Anacron with a single integrated program, providing many features missing from the original Cron daemon.

O utilitário hcron é uma alternativa muito mais rica em recursos:

hcron [brings something new to the table] in a number of really useful and practical ways. For example:

  • events are stored individually, each in their own file, rather than all in a single file
  • events are organized hierarchically in the filesystem rather than as a table in a single file
  • events are named and referenceable
  • events are defined as multiple key=value settings rather than a ordered columns on a single line
  • hcron is network oriented rather than system oriented
  • support for template events to reducing and reuse settings
  • support for failover events if an event cannot be spawned
  • support for settings and working with variables

Se você não precisa dos recursos adicionais de nenhuma das outras variantes, o mais simples de usar seria cron . O fluxo de trabalho típico para cron é criar um chamado trabalho cron para uma determinada tarefa, que consiste em um comando para executar e um padrão que especifica quando executá-lo. A sintaxe do padrão de tempo é dada pelo seguinte:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                       7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * *  command to execute

O daemon cron é executado a cada minuto e verifica todas as tarefas agendadas ativas para ver se alguma das tarefas possui padrões que correspondam à hora atual. Por exemplo, para executar um trabalho às 2:00, você deseja que o valor do minuto seja 0, que o valor da hora seja 2 e que os valores do dia do mês, do mês e do dia da semana sejam irrestritos. Isso seria denotado da seguinte forma:

0 2 * * * command

A sintaxe pode demorar um pouco para se acostumar, então aqui está um utilitário baseado na web que irá ajudá-lo a gerar expressões de trabalho cron:

E aqui está outra ferramenta baseada na Web que você pode achar útil:

Ele faz o inverso - permite que você insira um padrão de tempo e o exibe em inglês.

Existem várias maneiras diferentes de implantar tarefas agendadas. Há um arquivo crontab principal e vários subdiretórios de /etc/ que são destinados a tarefas agendadas do sistema:

/etc/crontab
/etc/cron.d
/etc/cron.daily
/etc/cron.deny
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

Para obter mais informações sobre isso, consulte, por exemplo, a seção relevante do Guia de implantação do CentOS:

O mais fácil é adicionar um arquivo crontab ao diretório /etc/crontab.d , por exemplo,

cat <<HEREDOC > /etc/crontab.d/update-yum.crontab
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root
HOME=/
0 2 * * *  yum -y update
HEREDOC

Você pode querer definir a variável MAILTO para o seu endereço de e-mail administrativo preferido para que você seja informado se o trabalho falhar.

Você também deve estar ciente de que os cronjobs são executados em um ambiente diferente do seu usuário, o que é uma pegadinha comum e uma fonte de frustração. Veja, por exemplo, o seguinte post:

por 06.11.2017 / 02:14