Comando do tempo de execução com o cron

3

Então eu tenho um crontab que tem essa linha:

30 16 * * * (time sysbench --test=cpu --cpu-max-prime=20000 run) 2>> ~/cpu.out

Eu uso isso porque a saída do tempo vai por padrão para o stderr e eu quero redirecioná-lo para um arquivo

Quando eu executo o comando no terminal ele escreve a saída que eu preciso:

real X.XXXs
user X.XXXs
sys  X.XXXs

Mas quando eu executo com o cron, ele grava isso no arquivo:

39.69 user 0.92 system 0:40.67elapsed 99%CPU (0avgtext+0avgdata 1400maxresident)k0inputs+1outputs (0major+450minor) pagefaults 0swaps

Alguém pode me ajudar?

PS: Na página man há a opção -o mas não está funcionando, se eu tentar recebo um erro

    
por fredcrs 23.05.2013 / 21:54

1 resposta

4

Quando você o está executando no shell, você está realmente usando a função integrada do bash, que se parece com isso:

anthony@Zia:~$ time perl -e 'sleep 1'

real    0m1.003s
user    0m0.000s
sys     0m0.004s

Cron não está usando o bash embutido; está usando /usr/bin/time :

anthony@Zia:~$ /usr/bin/time perl -e 'sleep 1'
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 1800maxresident)k
0inputs+0outputs (0major+514minor)pagefaults 0swaps

O segundo tem realmente todas as informações do bash embutido, além de mais. Ele rotula "real" como "decorrido". (É também por isso que a opção -o não está funcionando; essa é uma opção para /usr/bin/time , não para o bash incorporado).

Se você precisar usar o bash integrado, há duas coisas a serem tentadas:

  1. Coloque SHELL=/bin/bash no topo do seu crontab.
  2. Altere seu comando para chamar explicitamente bash -c "your command here" .
por 23.05.2013 / 22:11