Como faço para matar um cron job fugitivo?

3

Eu tenho um cronjob definido para ser executado constantemente. É um arquivo php que transmite dados do twitter. No entanto twitter cai de vez em quando ou perdemos a conexão, então eu tenho cron checando de volta a cada minuto para tentar executar o arquivo. O script php verifica um arquivo de bloqueio para garantir que várias cópias não sejam executadas. A coisa é que este script será executado por horas a fio e eu quero ser capaz de matá-lo. No entanto, não consigo encontrá-lo usando comandos como

ps ux

O cronjob foi iniciado com o meu usuário e eu olhei para vê-lo na raiz. Eu não consigo encontrar o processo em execução.

Estou usando

/usr/bin/php /var/www/twitter/stream.php

para executar no meu arquivo cron e sei que ele está em execução, porque a cada minuto ele grava um arquivo em um diretório. Eu posso parar cron, mas o processo continua, eu simplesmente preciso matá-lo. Não tenho certeza se isso pertence aqui ou no Stack Overflow.

    
por Caimen 03.06.2011 / 17:23

3 respostas

3

Para mostrar os daemons em ps , você precisa incluir a opção -e (System V / POSIX) ou a (BSDish). Experimente ps aux ou ps -ef .

    
por 03.06.2011 / 17:26
3

Você está fazendo errado. (Pelo menos na minha humilde opinião: -)

Você pode fazer o que quiser da maneira que Geekosaur ou James Yale sugeriram, mas eu acho que você realmente quer o do PHP pcntl_alarm () function (e seu parente pcntl_signal ) que permitirá que seu script PHP tire proveito do recurso SIGALRM e se mate quando algo der errado.

O que você faz com o despertador é sua chamada (pode ser tão simples quanto "Sair se eu estiver correndo por uma hora" ou tão complexa quanto "Verifique se recebemos dados do Twitter. Se não reinicialize a conexão e, se ainda assim não conseguirmos que os dados saiam e deixe o script rodar novamente mais tarde "- tudo depende da complexidade do seu script).

Mais perguntas sobre SIGALRM e manipulação de sinais devem provavelmente ir para o StackOverflow - eles estão (espero) familiarizados com ele e podem lhe dar mais orientação do ponto de vista de programação: -)

    
por 03.06.2011 / 17:37
2

Normalmente, os processos gravam o PID no arquivo de bloqueio, assim você pode encontrar os dois se o processo estiver em execução e o que é o ID em um só lugar.

Eu sugiro que você modifique seu script para fazer isso, então você pode apenas posix_kill ou similar, conforme necessário.

    
por 03.06.2011 / 17:25