2011-01-26 3 views
0

Привет Я держу свои файлы журналов в/opt/project/logs /, и я хочу, чтобы они ежедневно копировали их в/opt/bkp, сжимая их.Улучшение моего резервного сценария bash

Для этого я написал это и хорошо работает:

#!/bin/bash 

getdate(){ 
    date --date="$1 days ago" "+%Y_%m_%d" 
} 

rm -rf "/opt/bkp/logs/myapp_log_"$(getdate 365).gz ; 
/bin/cat /opt/project/logs/myapp.log | gzip > /opt/bkp/logs/myapp_log_`date +%Y_%m_%d`.gz ; 
echo "" > /opt/project/logs/myapp.log ; 

Однако это не работает или вообще, у меня будет несколько приложений, сохранение файлов с их именами, т.е. app1.log app2.log под одной и той же папке /opt/project/logs/. Как я могу сделать это как «функцию», где скрипт читает каждый файл под каталогом /opt/project/logs/, а резервное копирование каждого файла заканчивается расширением .log?

ответ

2

Вы можете использовать инструмент logrotate(8), который поставляется вместе со своим дистрибутивом. :) страница руководства есть пример, который выглядит близко к вашей потребности:

/var/log/news/* { 
     monthly 
     rotate 2 
     olddir /var/log/news/old 
     missingok 
     postrotate 
      kill -HUP `cat /var/run/inn.pid` 
     endscript 
     nocompress 
    } 

Ну не monthly немного или перезагрузить inn :), но я надеюсь, что вы получите идею, что вы можете легко добавить новый конфигурационный файл для /etc/logrotate.d/ и не беспокойтесь об этом еще раз. :)

0

Считаете ли вы использование 'logrotate'? Он будет сжимать и обрезать журналы для вас, необязательно обрабатывать процессы, требующие ногами, чтобы закрывать файлы журналов, делать чай и т. Д. И т. Д. Вероятно, это то, что использует ваш linux box для управления журналом.

человек logrotate

для больше. То, как вы идете, вы написали LogRotate к тому времени, вы получаете функции вы хотите :)

0

я предлагаю использовать logrotate тоже, но не может сопротивляться писать этот сценарий :)

proc_logs() { 
    for log in /opt/project/logs/*.log; do 
    cat "$log" | gzip > ${log%/*}/$(basename "$log" ".log")_`date +%Y_%m_%d`.gz; 
    touch "$log"; 
    done 
} 
Смежные вопросы