我有一个 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
问题在于使用time
shell 内置命令而不是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 中?