使用 cron 运行时间命令

使用 cron 运行时间命令

所以我有一个 crontab 有这一行:

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

我使用它是因为时间输出默认为 stderr 并且我想将其重定向到文件

当我在终端中运行命令时,它确实会写入我需要的输出:

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

但是当我使用 cron 运行时,它会将以下内容写入文件:

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

有人能帮我吗?

PS:在手册页中有 -o 选项,但它不起作用,如果我尝试这样做,我会收到错误

答案1

当您在 shell 中运行它时,您实际上正在使用 bash 内置函数,如下所示:

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

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

Cron 不使用内置的 bash;它正在使用/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

第二个实际上包含 bash 内置的所有信息,以及更多信息。它将“真实”标记为“已过去”。 (这也是该-o选项不起作用的原因;这是 的选项/usr/bin/time,而不是 bash 内置的选项)。

如果您需要使用内置的 bash,可以尝试以下两件事:

  1. 放在SHELL=/bin/bashcrontab 的顶部。
  2. 更改您的命令以显式调用bash -c "your command here".

相关内容