ограничение размера файла журнала от переменной

Использовать cron.

Сказать crontab -e как корень — или sudo crontab -e если Вы имеете sudo настроенный — и помещенный следующее в файл, который подходит в текстовом редакторе:

0  9 * * * cp /etc/hosts_worktime /etc/hosts
0 16 * * * cp /etc/hosts_playtime /etc/hosts

Это говорит это относительно нулевой минуты 9-х и 16-х часов каждого дня месяца, перезаписи /etc/hosts использование данных команд оболочки.

Вы могли бы на самом деле хотеть что-то немного более сложное:

0  9 * * 1-5 cp /etc/hosts_worktime /etc/hosts
0 16 * * 1-5 cp /etc/hosts_playtime /etc/hosts

То одно изменение — помещение 1-5 в пятом положении — говорит, что изменение между рабочим временем и временем воспроизведения происходит только в понедельник в течение пятницы.

Сказать man 5 crontab получить полное объяснение того, что все можно сделать в a crontab файл.

Между прочим, я изменил имена Вашего hosts файлы выше, потому что hosts_allow слишком близко к hosts.allow, используемый оболочками tcp.

6
02.07.2013, 00:32
3 ответа

Необходимо использовать logrotate. Сделайте что-то вроде этого

кошка/etc/logrotate.conf

/path/foo.txt {

    size 50M

    create 700 root root

    rotate 5

}

размер 50M – logrotate работает, только если размер файла равен (или больше, чем), этот размер.

создайте – поворачивают исходный файл и создают новый файл с указанным разрешением, пользователем и группой.

вращайтесь – ограничивает количество вращения файла журнала. Так, это сохранило бы только недавние 5 повернутых файлов журнала.

8
27.01.2020, 20:23
  • 1
    Хотя это работало бы, мне действительно нужен он как переменная в рамках сценария так, чтобы это могло легко быть установлено другими без любых проблем и было легко передаваемо для использования в других сценариях также. Я сделал эту подсказку по logrotate для меня, но все еще нуждаюсь в ней для других сценариев как переменная. –  boudiccas 01.07.2013, 14:23
  • 2
    этот: управляйте |, возглавляют-c 50M> /path/foo.txt –  mezi 01.07.2013, 15:52
  • 3
    можно также использовать/etc/security/limits.conf для установления предела для размера файла при пользователе. –  mezi 01.07.2013, 15:58

Что-то как этот?

LF=foo.txt
typeset -i LFSB LFSM LOGFILE=50
let LFSB=$(stat -c "%s" $LF)
# This is bytes - turn into MB, base 2
let LFSM=${LFSB}/1048576
if [ $LFSM -gt $LOGFILE ]
  then
    echo Logfile $LF is greater than $LOGFILE MB
  else
    echo Logfile $LF is less or equal than $LOGFILE MB
fi
0
27.01.2020, 20:23

Я использовал tail сделать это. Это - больше быстрого и грязного уважения решения к logrotate, но это делает задание.

Вот то, что я вставил свой сценарий:

# in the preceding lines, the log file is updated, with new content at the 
# bottom.
# every update causes the file to exceed the size limit (set to 1MB)

# using tail, put the last 1MB of the file in a temporary file
/usr/bin/tail -c 1MB /your/path/here/logfile.log > /your/path/here//temp 2>&1

# overwrite the older and oversized log file with the new one
/bin/mv /your/path/here/temp /your/path/here/logfile.log
3
27.01.2020, 20:23

Теги

Похожие вопросы