| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 19:32:13
|
lavh
GUJ Master
Membro desde: 30/07/2006 16:09:55
Mensagens: 1311
Offline
|
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...
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 19:53:41
|
rafaelglauber
GUJ Master
![[Avatar]](/images/avatar/e9abec5e32203998211653b45023be1c.jpeg)
Membro desde: 07/09/2007 23:05:20
Mensagens: 1065
Localização: Feira de Santana
Offline
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 20:03:27
|
lavh
GUJ Master
Membro desde: 30/07/2006 16:09:55
Mensagens: 1311
Offline
|
Valeu pela resposta Rafael.
Olhei a documentação que você passou e fiquei decepcionado!
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 20:13:03
|
rafaelglauber
GUJ Master
![[Avatar]](/images/avatar/e9abec5e32203998211653b45023be1c.jpeg)
Membro desde: 07/09/2007 23:05:20
Mensagens: 1065
Localização: Feira de Santana
Offline
|
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/08/2008 22:26:44
|
lavh
GUJ Master
Membro desde: 30/07/2006 16:09:55
Mensagens: 1311
Offline
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/08/2008 04:41:40
|
windsofhell
GUJ Master
Membro desde: 15/06/2007 08:31:17
Mensagens: 1681
Localização: Stockholm - Sweden
Offline
|
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
This message was edited 1 time. Last update was at 29/08/2008 04:42:17
|
Nao respondo MP!!!
Site: http://downhillracer.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/08/2008 07:50:58
|
rafaelglauber
GUJ Master
![[Avatar]](/images/avatar/e9abec5e32203998211653b45023be1c.jpeg)
Membro desde: 07/09/2007 23:05:20
Mensagens: 1065
Localização: Feira de Santana
Offline
|
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 ?
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/08/2008 07:58:22
|
windsofhell
GUJ Master
Membro desde: 15/06/2007 08:31:17
Mensagens: 1681
Localização: Stockholm - Sweden
Offline
|
rafaelglauber wrote:
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 ?
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.
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
This message was edited 3 times. Last update was at 29/08/2008 08:02:35
|
Nao respondo MP!!!
Site: http://downhillracer.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/08/2008 08:51:14
|
rafaelglauber
GUJ Master
![[Avatar]](/images/avatar/e9abec5e32203998211653b45023be1c.jpeg)
Membro desde: 07/09/2007 23:05:20
Mensagens: 1065
Localização: Feira de Santana
Offline
|
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.
|
|
|
 |
|
|