время процессора, пиковая память и т. д. для cronjobs - PullRequest
3 голосов
/ 19 декабря 2011

У меня довольно много cronjobs на веб-сервере, которые работают с разными уровнями привлекательности.

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

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

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

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

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

1 Ответ

0 голосов
/ 01 марта 2012

На самом деле вы можете вызвать getrusage из PHP, поэтому, возможно, эта идея осуществима: вместо вызова / usr / bin / php из crontab, вызовите оболочку, которая вызывает 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) также может быть полезна для этой цели.

...