Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PauloAlexandre

Desenvolver daemon

Recommended Posts

Olá Pessoal,

 

Estou com um dúvida, pois sei o resultado que preciso obter, mas não sei exatamente como chegar a esse. Portanto, gostaria que os amigos desse forum, se possível, me ajudassem a enterder e a fazer o que preciso. Desde já agradeço!

 

Eu preciso que seja feita uma configuração em um servidor dedicado, de forma a executar um arquivo php a cada segundo. Exatamente isso, a cada segundo, ou até mesmo a cada 1,1 ou 1,2 segundo.

 

O suporte do servidor me disse que preciso criar um "daemon", ou seja, um serviço que rode constantemente no servidor, com um processo de "sleep" de 1 segundo.

 

Esse daemon, é um script? se sim, como fazer para que ele rode constantemente? ou trata-se de configuração que deve ser feita no servidor?

 

Alguém poderia me dar algum exemplo de como isso funciona?

 

 

Agradeço a atenção de todos.

 

Abraço,

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um deamon esta mais ligado a serviços de rede, mas nada impede que você crie uma tarefa agendada no sistema ou mesmo que crie um processo de "linha de comando" com tal funcionalidade, e sim, pode ser feito em PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um deamon esta mais ligado a serviços de rede, mas nada impede que você crie uma tarefa agendada no sistema ou mesmo que crie um processo de "linha de comando" com tal funcionalidade, e sim, pode ser feito em PHP.

Certo, mas eu preciso de uma ação que funcione independente dos usuários que estarão no site. Por exemplo, se eu tiver 10 pessoas online no site no mesmo instante, não pode cada um executar tal procedimento, por isso preciso que isso funcione em background, ou seja, um processo que servirá para todos.

 

Por isso, um processo executado pelo servidor, que execute um arquivo PHP de segundo em segundo, seria à melhor solução.

 

 

Atenciosamente,

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você acha que este procedimento automatico pode levar mais que 1 segundo para ser executado?

E pq deve ser de segundo em segundo? Um tempo um pouco maior não teria o mesmo efeito?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você acha que este procedimento automatico pode levar mais que 1 segundo para ser executado?

E pq deve ser de segundo em segundo? Um tempo um pouco maior não teria o mesmo efeito?

 

De fato o comando precisa ser executado de segundo em segundo, ou no máximo 1,1 ou 1,2 segundo.

o comando a ser executado é simples e não ultrapassará 1 segundo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então sugiro mesmo que você use uma solução baseada em agendamento.

 

crontab é um programa do Unix que edita o arquivo onde são especificados os comandos a serem executados e a hora e dia de execução pelo cron, um programa que executa comandos agendados nos sistemas operacionais do tipo Unix (como o Linux ou o MINIX, por exemplo). O cron se encarregará de verificar a hora e determinar se existe ou não algum programa a ser rodado. Caso exista ele o rodará na hora e data solicitada.

Fonte: Wikipedia

 

Todo sistema Linux tem um sistema de agendamento de tarefas baseado no crontab. Você pode estabelecer uma tarefa agendada que seja executada de segundo em segundo, chamando um arquivo PHP com o procedimento que deve ser feito. Pelo painel de controle do seu host você deve ter acesso a opções para agendamento de tarefas.

 

Haveria um problema nesta solução se o procedimento demorasse mais que 1 segundo para ser executado. O crontab não testa se a tarefa que foi executada anteriormente já terminou, desta forma poderia causar algum tipo de interrupção do serviço. Você pode determinar que seu script tenha timeout para execução de 1 segundo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então sugiro mesmo que você use uma solução baseada em agendamento.

 

crontab é um programa do Unix que edita o arquivo onde são especificados os comandos a serem executados e a hora e dia de execução pelo cron, um programa que executa comandos agendados nos sistemas operacionais do tipo Unix (como o Linux ou o MINIX, por exemplo). O cron se encarregará de verificar a hora e determinar se existe ou não algum programa a ser rodado. Caso exista ele o rodará na hora e data solicitada.

Fonte: Wikipedia

 

Todo sistema Linux tem um sistema de agendamento de tarefas baseado no crontab. Você pode estabelecer uma tarefa agendada que seja executada de segundo em segundo, chamando um arquivo PHP com o procedimento que deve ser feito. Pelo painel de controle do seu host você deve ter acesso a opções para agendamento de tarefas.

 

Haveria um problema nesta solução se o procedimento demorasse mais que 1 segundo para ser executado. O crontab não testa se a tarefa que foi executada anteriormente já terminou, desta forma poderia causar algum tipo de interrupção do serviço. Você pode determinar que seu script tenha timeout para execução de 1 segundo.

 

Olá Prog,

 

E como seria a sintaxe de comando crontab para executar de segundo em segundo? Pois esse sistema já usa crontabs para outras finalidades, e no cPanel o tempo máximo disponibilidade é de minuto em minuto...

 

Qual seria a sintaxe do comando crontab?

 

Abraço

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Paulo,

 

De fato, foi uma gafe da minha parte.

 

Sendo assim, você pode usar o CRON para verificar de minuto em minuto, mas apenas para verificar se o seu processo (deamon) continua rodando.

 

Um script de exemplo (bem simples):

#!/bin/bash

while [ 1 ]; do
 php /caminho/do/seu/script.php
 sleep 1
done
exit 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Paulo,

 

De fato, foi uma gafe da minha parte.

 

Sendo assim, você pode usar o CRON para verificar de minuto em minuto, mas apenas para verificar se o seu processo (deamon) continua rodando.

 

Um script de exemplo (bem simples):

#!/bin/bash

while [ 1 ]; do
 php /caminho/do/seu/script.php
 sleep 1
done
exit 0

 

Olá Prog,

 

Como eu disse no começo, estou meio perdido nesse procedimento. Esse código que você passou é para executar o arquivo php de segundo em segundo. Mas como colocar ele para funcionar? de forma que se torna um processo sempre ativo no servidor?

 

Abraço

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual nível de acesso você possui ao seu host? Você tem acesso a um terminal bash/shell ou apenas acesso por FTP e painel de controle?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual nível de acesso você possui ao seu host? Você tem acesso a um terminal bash/shell ou apenas acesso por FTP e painel de controle?

 

Olá Prog,

 

Respondendo a sua pergunta, eu tenho acesso ao FTP, CPanel e WHM.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Paulo,

 

Vamos por etapas, mas isto também vai depender do nível de acesso que você possui no host.

 

1:

Você precisa criar um arquivo texto com o que será executado no script (bash);

 

2:

Transfere este arquivo, por FTP para o servidor (deixe-o em um local que não esteja acessiíel pela web);

Você precisa dar permissão para que este script possa ser executado (exemplo: chmod 744);

Se não conseguir dar tal permissão ao arquivo será necessário solicitar ao suporte;

 

3:

Usando o CPanel ou WHM você vai criar uma tarefa agendada que vai executar o seu script pela primeira vez;

Daí por diante o processo esta em execução por tempo indefinido e seu script estará sendo executado a cada segundo;

 

Para deixar o processo mais sofisticado seria interessante incluir neste bash script recursos para verificar se o processo continua em execução e, caso seja detectado que ele parou, iniciar novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Paulo,

 

Vamos por etapas, mas isto também vai depender do nível de acesso que você possui no host.

 

1:

Você precisa criar um arquivo texto com o que será executado no script (bash);

 

2:

Transfere este arquivo, por FTP para o servidor (deixe-o em um local que não esteja acessiíel pela web);

Você precisa dar permissão para que este script possa ser executado (exemplo: chmod 744);

Se não conseguir dar tal permissão ao arquivo será necessário solicitar ao suporte;

 

3:

Usando o CPanel ou WHM você vai criar uma tarefa agendada que vai executar o seu script pela primeira vez;

Daí por diante o processo esta em execução por tempo indefinido e seu script estará sendo executado a cada segundo;

 

Para deixar o processo mais sofisticado seria interessante incluir neste bash script recursos para verificar se o processo continua em execução e, caso seja detectado que ele parou, iniciar novamente.

Entendi...

 

Por qual ou quais motivos o processo poderia ser interrompido? Ele pode pagar, tipo assim, do nada?

Essa verificação eu poderia fazer atraves de uma cron executando minuto a minuto o daemon?

 

Desde já, muito obrigado por dedicar seu tempo para resolver minha dúvida. Valew mesmo!

 

Abraço

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que o caso mais clássico seria numa possível reinicialização do sistema (manutenção).

 

No mais, um processo nunca é interrompido. Mas pode ocorrer algum tipo de erro inesperado do script php que pode causar o travamento do processo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que o caso mais clássico seria numa possível reinicialização do sistema (manutenção).

 

No mais, um processo nunca é interrompido. Mas pode ocorrer algum tipo de erro inesperado do script php que pode causar o travamento do processo.

Olá Prog,

 

Obrigado pela força, estou conseguindo fazer funcionar por aqui... Estou ajustando para funcionar tudo certinho, mas o processo de segundo em segundo está sendo executado...

 

 

Grande abraço

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.