Como posso verificar se o meu cronjob está rodando no meu servidor via PHP?

2

Eu gostaria de dar um aviso Se o cron não estiver rodando ou se um certo cronjob não estiver configurado no crontab no meu servidor.

É possível verificar com o php?

    
por rubo77 06.06.2013 / 11:39

3 respostas

3

Você pode analisar a saída de crontab -l para ver se uma determinada entrada crontab está presente ou não. Quanto a se cron está em execução ou não, você pode analisar a saída de um comando ps -eaf para ver se crond está em execução ou não.

$ ps -eaf|grep [c]rond
root      1705     1  0 May27 ?        00:00:03 crond

A saída de crontab -l seria algo assim:

$ crontab -l
0 12 * * * ls

NOTA: Você pode usar a system() function no PHP para chamar ferramentas de linha de comando ou < href="http://php.net/manual/en/function.exec.php"> exec() .

EDIT # 1

Com base no seu comentário, você pode fazer o seguinte no PHP. Meu script, cronstatus.php :

#!/usr/bin/php
<?php
exec("PATH=/usr/sbin:/usr/bin:/sbin:/bin; service crond status", $out, $ret);
print $ret . "\n";
?>

exemplo de execução

$ sudo service crond stop
Stopping crond:                                            [  OK  ]
$ ./cronstatus.php 
3

$ sudo service crond start
Starting crond:                                            [  OK  ]
$ ./cronstatus.php 
0

A função exec pode retornar a saída do comando para uma variável, $out e os resultados do status retornados pelo comando executado em $ret .

    
por 06.06.2013 / 12:10
0

Se o PHP provavelmente pode ler o conteúdo de /etc/crontab , mas normalmente não o conteúdo de /var/spool/cron/crontabs/ você teria que analisar as linhas, principalmente ignorando as entradas comentadas (é isso que você quer dizer com 'um certo cronjob não está definido em crontab '?).

Verificar se há uma entrada 'cron' na tabela de processos deve ser possível, mas descobrir se ela está realmente fazendo algo ou não, talvez seja mais difícil.

Em uma máquina antiga, um tanto instável que eu havia herdado, cron às vezes morreria. Eu tinha configurado uma tarefa que seria executada a cada 15 minutos, notificando outra máquina mais confiável (via e-mail). Essa outra máquina executaria um cronjob, além de verificar se um e-mail havia chegado há menos de 15 minutos. Se não esse trabalho me mandaria um aviso no meu pager. Então, eu só receberia uma mensagem quando o cron estivesse morto, não a cada 15 minutos.

Você pode configurar algo semelhante se tiver uma segunda máquina para trabalhar. A mensagem de e-mail pode conter o conteúdo de qualquer arquivo crontab (mesmo em /var/spool/cron/crontabs/ ) e pode verificar se o comando necessário ainda está incluído.

    
por 06.06.2013 / 12:15
0

Uma solução mais limpa e portátil deve verificar o timestamp de um arquivo criado pelo cron especialmente para esse propósito.

Crie um cronjob que toque um arquivo a cada minuto legível pelo navegador, por exemplo:

* * * * *   www-data touch /var/www/cron-testfile

e verifique o timestamp com php:

<?php
if(time() - filemtime('/var/www/cron-testfile') > 600) {
   echo "warning, cron not running";
}
?>
    
por 05.02.2016 / 21:42

Tags