2015-06-01 3 views
0

Следующая строка, которая включает в себя cronjob.out.log file и error.log размер файла превышает

18,36,54 * * * * /usr/bin/perl /home/folder.my_perl.pl >> out.log 2>> error.log 

Файл error.log записывает все ошибки, а файл out.log записывает все выходные инструкции. Я хочу знать, что если размер обоих файлов превышает, то система автоматически создает другую или мы должны ее поддерживать вручную?

+0

Почему система должна создавать новые? Перенаправление ввода-вывода не является чем-то * умным *. Вы только говорите: * напишите описание файла X в файл Y. * –

+0

@CommuSoft Да, но, как и mysql и другая среда, создавайте файлы с ошибкой error.log и ставьте старые. Как мы можем это сделать? – Pranay

ответ

0

Вам придется поддерживать его вручную. В файловой системе нет каких-либо механизмов домоустройства, которые будут контролировать размер/возраст создаваемых файлов.

Для упрощения администрирования вы можете использовать logrotate. Это программа, которая обычно настраивается для вызова cron (проверьте в /etc/cron.daily, если у вас есть сценарий под названием logrotate), но который также можно вызвать вручную (/usr/sbin/logrotate /etc/logrotate.conf).

+0

Meance, если я хочу, чтобы он определял размер файла по системе и обрабатывал новый файл журнала. например, mysql error.log files-> Если размер этого файла превышает его, он создает новый, а старый получает commpress. Возможно ли это в верхней строке? – Pranay

+0

@Pranay: если вы посмотрите на сайт, который я связал, вы увидите, что вы можете установить множество триггеров для обрабатываемых файлов. Например, вы можете потребовать, чтобы файл, размер которого превышал 10 МБ или старше 2 недель, был переименован и сжат. – WoJ

+0

извините, но как использовать этот тег Logrotate. Он использует напрямую или. включают некоторые связанные с кодом. – Pranay

0

Что вы делаете, это просто открыть дескрипторы файлов 1 и 2 для этих файлов до запуска программы. Он не знает, куда идет выход, и поэтому он ничего не может сделать для управления его выходом при вызове этого способа.

Вы могли:

  1. есть программа открывать файлы и управлять их размер,
  2. имеют выход по трубам к другой небольшой скрипт, который управляет размером самостоятельно,
  3. использования Sys::Syslog,
  4. используйте Log::Dispatch::FileRotate,
  5. или любое количество других модулей регистрации.
+0

Если я использовал Sys Sys :: Syslog и Log :: Dispatch :: FileRotate, то как это мне поможет? Извините, но я использую его в первый раз. – Pranay

+0

'Sys :: Syslog' - системный регистратор, и файлы журнала уже повернуты' logrotate' (в Linux). 'Log :: Dispatch :: FileRotate' - это библиотека, которая регистрирует данные и автоматически поворачивает файлы, которые, как я думал, именно то, что вы хотите.Пожалуйста, прочитайте 'perldoc' на этих модулях для более подробной информации. (FYI: я часто реализовал вариант 2, когда я завершаю программы без Perl и хочу, чтобы они syslog их stdout/stderr, не изменяя эти программы, но каждая строка имеет отметку времени.) – kjpires