Назад | Перейти на главную страницу

Как записать время, затрачиваемое 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 НЕ ВАРИАНТ.

Что о:

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

Как насчет встроенной функции демона 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).

Проблема в использовании time встроенная оболочка против 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 вы можете использовать -o и -a параметры вместо перенаправления оболочки:

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

Я бы, наверное, попробовал поставить

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

В скрипт, а затем вызовите этот скрипт из вашего задания cron.

Кстати, действительно ли ваш двоичный файл php находится в / usr? Или / usr / bin?

похоже на то time встроен в bash (по крайней мере, в моей системе). Следующие работы для меня: /bin/bash -c 'time ls' > out.std 2> out.err. Выход time будет в stderr (файл out.err).