У меня 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).