Linux agendar tarefas no cron
O cron é um serviço usado para agendar tarefas que são executadas num horário preestabelecido. O Linux usa o cron para executar determinadas tarefas de manutenção como por exemplo: limpar os ficheiros temporários que tenham mais que dois dias. O que é uma tarefa bastante simples de fazer manualmente, mas fazê-la sempre a determinados períodos de tempo sem falhar é muito difícil para nós humanos.
Neste artigo vou tentar explicar de forma simples o seu funcionamento, bem como dar alguns exemplos de agendar uma tarefa para que corra a um horário preestabelecido.
O cron trabalha com crontabs, é um ficheiro onde cada utilizador pode agendar tarefas. O cron lê estes ficheiros para saber exactamente quando executar uma determinada tarefa.
Como são formatados os ficheiros de tarefas “crontabs”
Os ficheiros de tarefas podem ter várias linhas, mas cada tarefa é definida em apenas uma linha. Em cada linha é definido o horário a que a tarefa irá executar e o comando que será executado no horário definido. Ora vejamos.
* * * * * [comando a ser executado] | | | | |____________ dia da semana de 0 a 6 ou a abreviatura em | | | | inglês dos dias da semana son, mon, tue, etc. | | | | | | | |______________ mês de 1 a 12 ou abreviatura em inglês | | | dos meses jan, feb, mar, etc | | | | | |________________ dia do mês de 1 a 31 | |__________________ hora de 0 a 23 |____________________ minuto de 0 a 59
Para definir o horário temos de preencher valores concretos para os minutos, horas, dia do mês, mês e dia da semana.
Também podemos usar o asterisco ‘*‘ para preencher cada campo do horário. O asterisco significa “sempre” ou “todos”. Por exemplo o asterisco no campo das horas significa que é para executar em todas as horas.
Cada campo pode ter um valor, vários valores, uma série de valores, uma fracção ou uma série de fracções. Ora veja um exemplo com o campo da horas:
valor | descrição |
---|---|
11 | Um valor: é executado às 11 da manhã. |
3,8,12 |
múltiplos valores: é executado às 3 horas, 8 horas e 12 horas da manhã. |
6-9 | Série de valores: é executado todas as horas entre as 2 horas e as 8 horas da manhã. |
*/2 | Fraccionário: executado a cada duas horas. Ex: 0 meia noite, 2 horas, 4 horas, 6 horas, etc. |
2-12/2 | Série fraccionaria: executa a cada duas horas entre as 2 horas e as 12 horas. Ex: 2 horas, 4 horas, 6 horas, 8 horas, 10 horas, 12 horas. |
O horário também pode ser preenchido com algumas palavras especiais que começam pelo caractere ‘@‘, que representam valores para todos os campos do horário. Ora vejamos:
palavras | equivalência | descrição |
---|---|---|
@reboot | sem equivalência | É executado quando o sistema é iniciado e reiniciado. |
@yearly | 0 0 1 1 * | É executado à meia noite de um de Janeiro cada ano. |
@annually | 0 0 1 1 * | É executado à meia noite de um de Janeiro cada ano. |
@monthly | 0 0 1 * * | É executado à meia noite no primeiro dia de cada mês. |
@weekly | 0 0 * * 0 | É executado à meia noite de cada domingo. |
@daily | 0 0 * * * | É executado à meia noite cada dia. |
@midnight | 0 0 * * * | É executado à meia noite cada dia. |
@hourly | 0 * * * * | É executado ao primeiro segundo de cada hora. |
Alguns exemplos de horários que ajudam de certa forma a perceber como o cron funciona.
horário | TrabalhO |
---|---|
* * * * * | echo “Executa o comando todos os minutos” |
*/2 * * * * | echo “Executa o comando de 2 em 2 minutos” |
*/20 * * * * | echo “Executa o comando de 20 em 20 minutos” |
0 * * * * | echo “Executa todas as horas” |
0 */4 * * * | echo “Executa de 4 em 4 horas” |
0 13 * * * | echo “Executa todos os dias às 13 horas” |
30 3 * * * | echo “Executa todos os dias às 3 horas 30 minutos” |
0 0 * * * | echo “Executa todos os dias à meia noite” |
0 0 * * 0 | echo “Executa todos os domingos” |
0 0 * * 1 | echo “Executa todas as segundas feiras” |
0 0 1 * * | echo “Executa ao primeiro dia do mês” |
0 0 1 1 * | echo “Executa no primeiro dia de Janeiro” |
Agendar tarefas com o Crontab
O comando que nos permite agendar de forma simples e funcional é o crontab. O cron tem suporte para todos os utilizadores do sistema. Cada utilizador agenda as tarefas de que necessita.
Editar o ficheiro de tarefas para o utilizador corrente
$ crontab -e
Ao executarmos este comando normalmente o sistema mostra vários editores de texto para que possamos escolher em qual deles queremos editar o ficheiro tarefas. No Ubuntu da-nos a escolher entre o “nano” e o “vim.tiny”. Outras distribuições podem mostrar outros editores. Após escolhermos o editor que queremos usar é aberto nesse editor o ficheiro de tarefas do corrente utilizador neste caso. É neste ficheiro que podemos inserir uma ou mais tarefas a executar, com o mesmo horário ou com horários diferentes.
Editar o ficheiro de tarefas de outro utilizador
Podemos também editar o ficheiro de tarefas de outro utilizador, desde que tenhamos permissões para tal. Normalmente só o utilizador root tem permissão para editar tarefas de todos os utilizadores. Caso tenhamos permissões, corremos o seguinte comando.
# crontab -u utilizador -e
Listar as tarefas do corrente utilizador
$ crontab -l
Listar as tarefas de outro utilizador
# crontab -u utilizador -l
O cron é realmente importante em qualquer sistema, perceber como usa-lo é simples e usa-lo vai nos poupar muito trabalho desnecessário na administração de um sistema.
Partilhem, Comentem e experimente!