Como cron do Linux funciona?

Olá pessoal,

não estou querendo saber como agendar algo no cron nem nada parecido, o que eu gostaria de saber é como o cron funciona na prática.

Tipo, eu agendo um processo para ser executado as 10:00. Como, as 10:00, o SO vai e starta o processo? Ele cria o processo e faz ele dormir até o horário determinado?

Não sei se eu fui claro, mas o que eu quero saber é como o SO sabe que tem uma tarefa pra ser executado no horário x, e como no horário x ele vai e executa essa tarefa? Que mecanismo ele usa pra cruzar essas informações…

Eu tentei procurar algo no Google meio por cima, mas não encontrei nada. Se alguém tiver um link ou algo assim…

Oi,

Tá usando o linux ai? Se tiver com o man instalado e suas páginas digite: “man cron” no shell.

Caso não tenha pode tentar aqui: http://unixhelp.ed.ac.uk/CGI/man-cgi?cron+8

Pelo que li ele inicia o processo somente na hora desejada, ele não adormece ninguém…na verdade na inicialização ele carrega o crontab e organiza as tarefas por periodicidade, isso fica na memória, caso ocorre alguma alteração tem um monitor que carrega as tarefas novamente…quando chega no momento configurado ele inicializa a tarefa que foi configurada.

Valeu pela resposta Rafael.

Olhei a documentação que você passou e fiquei decepcionado! :cry:

Achei que existia alguma solução bacana, tvz mágica pra isso, mas não, pelo que li, ele fica de minuto em minuto vendo
se tem alguém pra rodar, se tiver, ele vai e roda.

Oi,

Mas qual seria seu problema? O que pretende fazer? Acho que é trivial esse comportamente de testar a cada intervalo de tempo se tem ou não tarefas a executar…como gostaria que fosse?

Vou contar toda a história pra vc entender…

lá na empresa, vira e mexe a gente precisa fazer algo do tipo: “A conta do usuário expira depois de 48 horas”

Normalmente, pra fazer isso a gente usa o banco de dados. Grava a data de quando a conta expira, e de 1 em 1 hora por exemplo, pega todos os caras que precisam ser expirados e faz o que tem que fazer.

A questão é que a gente não acha essa solução de ficar fazendo pooling no banco de dados muito legal. Então, hoje numa discussão com o pessoal, surgiu a idéia de pesquisar como o cron do Linux funcionava, pra quem sabe ver uma forma diferente de fazer isso…

Foi meio viagem mesmo, a gente pensou que de repente o cron tivesse uma solução diferente para esse problema, mas na verdade a solução do cron é bem parecida com o que a gente usa hj jah…

Esse comportamento de estar a cada intervalo de tempo é realmente trivial…como eu disse foi só uma viagem mesmo pra quem sabe chegar numa idéia diferente…

[]'s

O que vc pode fazer eh sempre que alguem tentar logar no seu sistema vc verifica se a data de ativacao da conta eh mais velha que 48 horas, se for vc inativa a conta no banco e exibe uma msg pro usuario que a conta expirou, nao funciona ?
Dessa forma vc nao precisa ficar rodando processos de 1 em 1 hora pra inativar as contas mais velhas q 48 horas.

Acho que com cron seria uma solucao interessante mas como vc disse eh bem parecido com o que vc ja tem, mas eu acho fazer isso de 1 em 1 hora usando cron nao eh um processamento tao caro, uma vez que isso eh rodado em background e assim que o programa termina o processamento.

Se vc fizer um script que acessa o banco verifica quando a conta do usuario tem 48 ou mais de 48 horas e inativa a conta? Ai vc poderia ter um processo na cron que ativa esse script de 1 em 1 hora, todos os dias, por exemplo:

01 * * * * user /usr/bin/perl InativaContas.pl

Acho que a primeira solucao eh a mais facil.

//Daniel

Já me metendo onde não fui chamado…isso dependeria do usuário conectar no sistema, e se ele precisar de um relatório de usuários Ativos X Inativos??? A menos que ele tivesse também uma rotina para inativar executada imediatamente antes de usar essa informação.

:?

Já me metendo onde não fui chamado…isso dependeria do usuário conectar no sistema, e se ele precisar de um relatório de usuários Ativos X Inativos??? A menos que ele tivesse também uma rotina para inativar executada imediatamente antes de usar essa informação.

:? [/quote]

Mas vc vc poderia rodar um script nao com tanta frequencia tipo a cada uma hora. Poderia ser no final da noite, inativando os usuarios que precisam ser inativos.
Ou entao como vc falou a mesma rotina de relatorio, faz uma varredura no banco de atualiza a informacao que esta desatualizada .

Pra mim parece uma melhor solucao do que ficar rodando servicos durante o dia.

Pensando ainda melhor, pra pegar os que estao ativos eh select (datetime_atual - datetime_ativacao < 48 ) e inativos (datetime_atual - datetime_ativacao >= 48 )

//Daniel

Oi,

Daniel, qualquer uma dessas suas soluções eu acho melhor do que testar a cada minuto se tem ou não usuário inativo…pior ainda se a quantidade de usuários for aumentando ao longo do tempo.