улучшение моего резервного скрипта bash - PullRequest
0 голосов
/ 26 января 2011

Hello Я храню свои файлы журналов в / opt / project / logs / и хочу ежедневно копировать их в / opt / bkp, сжимая их.

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

#!/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?

Ответы [ 3 ]

2 голосов
/ 26 января 2011

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

  /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 голосов
/ 26 января 2011

Я бы тоже предложил использовать 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
}
0 голосов
/ 26 января 2011

Рассматривали ли вы использовать «logrotate»?Он будет сжимать и сокращать журналы для вас, опционально запускать процессы, которые нужно запустить, чтобы закрыть файлы журналов, приготовить чай и т. Д. И т. Д. Это, вероятно, то, что ваш linux-бокс использует для управления журналами.*для большего.То, как вы идете, вы будете писать logrotate к тому времени, когда вы получите желаемую функциональность:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...