如何记录 cron 执行所需的时间。

如何记录 cron 执行所需的时间。

我有一个 cron 设置每分钟运行一次

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

现在,我使用时间函数来测量脚本的执行时间。因此,运行

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

输出

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

但它不能与这样的 cron 一起工作:

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

它在命令行上也不起作用

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

在上述两个示例中,时间函数实际上计算的是写入 my_log_file 所花费的时间,而不是将其输出写入日志文件。在脚本中添加代码并记录 STD OUTPUT 不是一种选择。

答案1

关于什么:

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

答案2

内置的 cron 守护进程功能怎么样?

检查 cron 守护进程的手册页。许多都有“-L”参数来指定日志级别。例如在 Ubuntu(即 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).

答案3

问题在于使用timeshell 内置命令而不是time二进制文件。使用内置命令不起作用,即使使用正确的重定向也是如此:

$ time pwn >> foo 2>&1

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

$ cat foo 
/tmp

使用二进制文件:

$ /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

使用 GNU time 你可以使用-o-a选项代替 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

答案4

我可能会尝试把

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

进入脚本,然后从你的 cron 作业中调用该脚本。

另外,你的 php 二进制文件真的在 /usr 中吗?还是在 /usr/bin 中?

相关内容