2011-12-19 3 views
3

У меня довольно большое количество cronjobs на веб-сервере, которые работают с различными уровнями приятности.log cpu time, пик mem и т. Д. Для cronjobs

Похоже, что некоторые из них требуют неожиданного числа циклов ЦП в тестовой базе данных. Конечно, я могу увидеть, что рабочие места разглагольствовать в 16:30, но из-за ряда crons, моя задача была бы намного проще, если бы у меня был журнал, как это:

Dec 19 02:13:09 /var/crons/cron1 [user cpu time used] [system cpu time used] [peak mem] .. 

Есть ли утилита, которую я мог бы просто добавьте перед кронтабом, например, так:

*/6 * * * * nice -n 18 getrusage?? /usr/bin/php /var/crons/cron1 > /var/log/something 

Может быть что-то связанное с getrusage(2)?

ответ

0

Вы можете на самом деле назвать getrusage от PHP, поэтому, возможно, эта идея выполнима: вместо вызова/USR/BIN/PHP из кронтаба, вызовите оболочку, которая вызывает getrusage до и после вызова фактического PHP скрипта:

#!/usr/bin/php 
<?php 
$fh = fopen("/var/log/cronusage.log", "a"); 
fputs($fh, "Executing " . $_SERVER['argv'][1] . "\n"); 
fputs($fh, "BEFORE\n"); 
foreach (getrusage() as $k => $v) { 
    fputs($fh, "$k -> $v\n"); 
} 
fclose($fh); 

$_SERVER['argv'][0] = '/usr/bin/php'; 
// FIXME Attention args not escaped possible security vuln. 
system(join(' ', $_SERVER['argv'])); 

$fh = fopen("/var/log/cronusage.log", "a"); 
fputs($fh, "AFTER\n"); 
foreach (getrusage() as $k => $v) { 
    fputs($fh, "$k -> $v\n"); 
} 
fputs($fh, "\n"); 
fclose($fh); 
?> 

Это не проверено, просто идея.

Команда time(1) также может быть полезна для этой цели.

Смежные вопросы