E sobre:
* * * * * (time /usr/php /my/location/script.php) >>my_log_file 2>&1
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.
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
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).
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?
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).