Tutorial: Como agendar tarefas com o "cron"

Iniciado por gabriel0085, 22 de Outubro de 2007, 16:02

tópico anterior - próximo tópico

gabriel0085


Autor da dica: Marcus Vinicius

Fonte: http://www.prosadigital.com/linux/agendar-tarefas-com-o-cron/




Agendar tarefas com o cron

Olá caros leitores!

Neste meu novo artigo, vou abordar o uso de uma ferramenta indispensável para administradores de servidores linux, e não obstante, uma ferramenta de muita valia para usuários em geral. Falarei sobre o cron.

O que é o cron?

O cron, é o agendador de tarefas do linux, que ao contrário do at, que só permite que executemos tarefas agendadas apenas uma única vez, o cron nos permite executar tarefas repetidamente, ou seja, todo dia, toda semana, ou em qualquer período pré-estabelecido.

Como usar o cron?

Para usar o cron, ou seja, agendar uma tarefa, precisamos editar o arquivo crontab. O caminho para este arquivo, na maioria das distribuições, é: /etc/crontab. Você pode agendar várias tarefas, para tanto você deve colocar um agendamento por linha.

A sintaxe de configuração para um agendamento no arquivo /etc/crontab, que é bem simples, é explicada a seguir.

(minutos) (horas) (dias do mês) (mês) (dias da semana) (usuário) (comando)

Onde:

minutos: Representa o minuto no qual o comando será executado. Aceita apenas números de 0 a 59.

horas: Representa a hora em que o comando será executado. Aceita apenas números de 0 a 23.

dias do mês: Define em que dia o comando será executado. Aceita apenas números de 0 a 31.

mês: Mês para o qual se agendou a execução do comando. Aceita apenas números de 1 a 12.

dias da semana: Define o dia da semana onde o comando será executado. Aceita apenas números de 1 a 7. Sendo 1 para segunda-feira e 7 para o domingo.

usuário: Definimos o usuário que executará o comando. Aceita apenas nomes de usuários previamente criados.

comando: Qualquer comando do sistema, scripts em geral, ou seja, qualquer arquivo que tenha permissão de execução.

Apresentados os campos, vamos aprender como trabalhar com eles de forma prática.

Vamos agendar um fictício script de backup para ser executado toda a noite às 22hs.

0 22 * * * root /root/backup.sh

Note a presença do *. Ele pode ser interpretado como todos, ou todas. Neste caso, agendamos o nosso script para ser executado às 22h e 0m de todos os dias, todos os meses, todos os dias da semana. O usuário que executará o script será o root, e por fim, definimos qual script será executado.



Vamos a um próximo exemplo.

0 0,6,12,18 * * * root /root/backup.sh

Note a presença da vírgula. Ela pode ser traduzida por e. Neste exemplo podemos ler da seguinte forma: "root, execute o script /root/backup.sh todos os dias da semana, todos os meses, todos os dias, às 0,6,12 e 18hs e 0 minutos."



Suponhamos que você seja supersticioso e queira agendar um backup geral do sistema toda sexta-feira 13 antes da meia noite. Para o cron, isto não é problema, como mostra o próximo exemplo.

0 23 13 * 5 root /root/backupGeral.sh

No exemplo acima, o script é executado às 23hs e 0min do dia 13 de todos os meses, porém somente quando neste dia 13, o dia da semana for 5(sexta-feira) .



Para agendarmos um comando para ser executado de 5 em 5 minutos por exemplo, podemos fazer da seguinte forma:

*/5 * * * * root /root/backup.sh



O cron também aceita agendamento por intervalos. Desta forma eu posso agendar um comando para ser executado da seguinte forma:

*/5 9-18 * * * root /root/backup.sh

Na linha acima, o comando /root/backup.sh é executado a cada 5 minutos, no intervalo das 9 as 18 hs de todos os dias, todos os meses, todos os dias da semana.



Existe um outro método, que eu considero como mais apropriado, para agendar tarefas no cron. Usando o comando crontab -e, editamos as tarefas apenas para o usuário corrente.

A sintaxe é bem semelhante, com apenas uma modificação: não informamos o usuário que executará o comando, já que esta tabela já é do usuário que executou o comando crontab -e.

Vejamos a sintaxe:

(minutos) (horas) (dias do mês) (mês) (dias da semana) (comando)

O restante é tudo igual ao que já foi explicado.

Para visualizar as tarefas agendadas para o usuário, digite o comando crontab -l.

O arquivo de configuração também aceita notação de comentário. Desta forma, toda a linha do arquivo que começar com o caractere #, será ignorada, ou seja, não será executada.

Terminado este artigo espero poder ter ajudado. Lembrem-se que é bom ter essa configuração no sangue, já que o administrador de sistema está sempre precisando dela.

Um grande abraço,

Paz e bem!

Alex Souza

Gabriel,

Estou precisando usar o agendamento para conectar e desconectar (Dial Up), mas pelo que vi o Cron não programa uma mesma tarefa para ser executada semanalmente como o agendador de tarefas do Windows.

Existe alguma maneira de fazer isso?

leandromdelima

Como assim não programa semanal?  Acho que vc não percebeu pois nosso amigo gabriel esqueceu de colocar em negrito:

Citação de: gabriel0085 online 22 de Outubro de 2007, 16:02

A sintaxe de configuração para um agendamento no arquivo /etc/crontab, que é bem simples, é explicada a seguir.

(minutos) (horas) (dias do mês) (mês) (dias da semana) (usuário) (comando)

Onde:

minutos: Representa o minuto no qual o comando será executado. Aceita apenas números de 0 a 59.

horas: Representa a hora em que o comando será executado. Aceita apenas números de 0 a 23.

dias do mês: Define em que dia o comando será executado. Aceita apenas números de 0 a 31.

mês: Mês para o qual se agendou a execução do comando. Aceita apenas números de 1 a 12.

dias da semana: Define o dia da semana onde o comando será executado. Aceita apenas números de 1 a 7. Sendo 1 para segunda-feira e 7 para o domingo.

usuário: Definimos o usuário que executará o comando. Aceita apenas nomes de usuários previamente criados.

comando: Qualquer comando do sistema, scripts em geral, ou seja, qualquer arquivo que tenha permissão de execução.

Quando eu avançar, avancem comigo.  Se eu parar, me empurrem para frente.  Se eu der meia volta, matem-me.

Alex Souza

leandromdelima,

Eu reaperei nessas partes, sim. Mas eu queria programar a conexão/desconexão para se repetir "eternamente" durante os dias da semana que eu escolhesse. Ou você acha que eu iria fazer o agendamente todo o mês?

Ex: Conectar de 00:00 de segunda à sexta-feta. Queria apenas programar algo desse tipo e que se repetisse em todas as semanas de todos os meses, e não apenas no mês que eu especificasse. (parte da sintaxe: (dias do mês) (mês))

Até mais.

alexmatos

Citação de: Anny Rose online 07 de Janeiro de 2008, 21:23
leandromdelima,

Eu reaperei nessas partes, sim. Mas eu queria programar a conexão/desconexão para se repetir "eternamente" durante os dias da semana que eu escolhesse. Ou você acha que eu iria fazer o agendamente todo o mês?

Ex: Conectar de 00:00 de segunda à sexta-feta. Queria apenas programar algo desse tipo e que se repetisse em todas as semanas de todos os meses, e não apenas no mês que eu especificasse. (parte da sintaxe: (dias do mês) (mês))

Até mais.

Pra isso você teria que usar o *. Acho que o comando ficaria assim:

# Conectar
0 0 * * * root comando-para-conectar

# Desconectar
0 6 * * * root comando-para-desconectar


Isso se você quisesse conectar às 00:00 e desconectar às 06:00.

Alex Souza

#5
Tem razão, meu amigo, eu que não havia prestado atenção nessa parte, e também não tinha entendido algumas partes da sintaxe. Mas hoje encontrei um tópico em outro fórum que explica como agendar a conexão/desconexão com o crontab.

Mais tarde eu irei fazer um tutorial explicando de maneira mais simples e posto lá na seção iniciantes.

Até mais. Obrigado.