Como registrar o tempo gasto por um cron para executar.

3

Eu tenho um cron configurado para rodar a cada minuto

* * * * * /usr/php /my/location/script.php 

Agora, uso a função tempo para medir o tempo de execução do script. Então, rodando

console$ time /usr/php /my/location/script.php 

saídas

real    0m0.000s
user    0m0.000s
sys     0m0.000s

Mas isso não funciona com o cron assim:

* * * * * time /usr/php /my/location/script.php 2>&1 >> my_log_file

nem funciona na linha de comando

console$ time /usr/php /my/location/script.php >> my_log_file

Em ambos os exemplos acima, a função time realmente calcula o tempo gasto para gravar em my_log_file, em vez de gravar sua saída no arquivo de log. Adicionando código no script e gravando STD OUTPUT não é uma opção.

    
por Stewie 28.09.2011 / 21:24

5 respostas

8

E sobre:

 * * * * *    (time /usr/php /my/location/script.php) >>my_log_file 2>&1
    
por 28.09.2011 / 21:50
2

O problema é usar o time shell embutido vs. o time binário. Usando o builtin não funciona, mesmo com o redirecionamento adequado:

$ time pwn >> foo 2>&1

real    0m0.003s
user    0m0.000s
sys 0m0.002s

$ cat foo 
/tmp

Usando os trabalhos binários:

$ /usr/bin/time pwd >> foo 2>&1
$ cat foo 
/tmp
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 564maxresident)k
64inputs+8outputs (1major+175minor)pagefaults 0swaps

Com o tempo GNU, você pode usar as opções -o e -a em vez de redirecionamento do shell:

$ /usr/bin/time -o foo -a pwd
/tmp
$ cat foo 
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 564maxresident)k
0inputs+0outputs (0major+179minor)pagefaults 0swaps
    
por 28.09.2011 / 21:53
2

Que tal o recurso daemon do cron embutido?

Verifique a página de manual do seu daemon do cron. Muitos têm um argumento "-L" para especificar um nível de log. Por exemplo, no Ubuntu (ou seja, Debian):

 -L loglevel
           Sets  the loglevel for cron. The standard logging level (1) will log the
           start of all the cron jobs. A higher loglevel (2) will cause cron to log
           also the end of all cronjobs, which can be useful to audit the behaviour
           of tasks run by cron. Logging will be disabled if the loglevel is set to
           zero (0).
    
por 28.09.2011 / 22:25
0

Eu provavelmente tentaria colocar

/usr/bin/time /usr/php /my/location/script.php 

Em um script e, em seguida, chamando esse script de seu cron job.

Como um aparte, o seu binário php está realmente em / usr? Ou / usr / bin?

    
por 28.09.2011 / 21:31
0

parece time é bash embutido (pelo menos no meu sistema). A seguir funciona para mim: /bin/bash -c 'time ls' > out.std 2> out.err . A saída de time estaria em stderr (arquivo out.err).

    
por 28.09.2011 / 21:53