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!
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?
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!
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: