Jump to content

gzipнуть логи сервера


LunatiK
 Share

Recommended Posts

В общем суть проблемы в том что имеются в папке логи сервера они создаются и удаляются. т.е. есть их за неделю по штуки за день.

Задача состоит в том чтоб закомпрессить их по логу в каждый архив при этом оставить оригиналы без изменения рытьё мануала по gzip и tar меня к желаемому результату не привели.

Ещё раз, но уже наглядно:

Есть файлы:

/log/20120801

/log/20120802

/log/20120803

/log/20120804

/log/20120805

/log/20120806

/log/20120807

Нужно чё-то запустить по крону чтоб получилось:

/log/20120801

/log/20120801.gz

/log/20120802

/log/20120802.gz

/log/20120803

/log/20120803.gz

/log/20120804

/log/20120804.gz

/log/20120805

/log/20120805.gz

/log/20120806

/log/20120806.gz

/log/20120807

/log/20120807.gz

Можно запакованное и в отдельную папку кидать, это не принцыпиально

Очень надеюсь на вашу помощь, заранее благодарствую.

Link to comment
Share on other sites

У GNUтого gzip нету кошерной опции -k, позволяющей сохранять исходные (несжатые) файлы. Если критично использование GZIP, то можно воспользоваться опцией -c, но для группы файлов придется писать скрипт (несложный).

Если не принципиально, можно вот так:


cd {directory_where_archives_are_stored}
bzip2 -k9 /log/*

-9 - это уровень сжатия (максимальный). Вместо * можно получать, например, текущий месяц и паковать архивы только за этот месяц

Если хочется все в один архив, то есть tar:


tar -czf path-to-archive.tar.gz logs

logs - каталог с логами

-c - создать tar архив

-z - запаковать содержимое при помощи gzip

-f - путь к файлу, в который сохранять архив

Edited by hedgehog
Link to comment
Share on other sites

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

В чём загвоздка? Имхо вопрос только в выборе языка (исходя из предпочтений/возможностей сервера).

Link to comment
Share on other sites

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

В чём загвоздка? Имхо вопрос только в выборе языка (исходя из предпочтений/возможностей сервера).

Я так понимаю в том, что GNU gzip удаляет исходные файлы после архивирования, а этого ТС не хочет

Link to comment
Share on other sites

но для группы файлов придется писать скрипт (несложный).

В этом та и сложность :) мож кинете ссылкой хотябы на то где учат эти скрипты писать и чтоб можно было научиться «с нуля»

Если не принципиально, можно вот так:


cd {directory_where_archives_are_stored}
bzip2 -k9 /log/*

-9 - это уровень сжатия (максимальный). Вместо * можно получать, например, текущий месяц и паковать архивы только за этот месяц

если bzip2 есть у хостера, то это конечно спасиёт ситуацию

Если хочется все в один архив, то есть tar:

Нет:) в один не надо, мне их автоматом забирать ещё нужно будет. лишний трафик не нужен, есть проверка на то что уже скачалось.

Link to comment
Share on other sites

Я не особо понял как именно надо паковать. Предположил что один файл = один день и утром надо загзипить вчерашний лог. Если так, то как-то так

#!/bin/bash

yesterday=`date --date='yesterday' '+%Y%m%d'`
gzip -c /log/$yesterday > /log/$yesterday.gz

Link to comment
Share on other sites

Жень, тут читал?

Ну и думаю не обязательно же писать именно шелл скрипт для сжатия в гзип, можно же и на пхп, а в кронтаб прописать до него путь?

Хотя конечно на уровне сервера лучше будет, да и нагрузки меньше, но крон в любом случае будет давать свою долю нагрузки на сервер.

Link to comment
Share on other sites

Книга

Девид Тейнсли - "Linux и Unix. Программирование в shell"

шелл-скрипт

#/bin/bash

cd log

for files in `ls`

do

tar -czf "$files.tar.gz" $files

done

Зачем нужен tar для сжатия одного единственного файла? Масло масляное? :) Тогда уже как-то так:

#!/bin/sh

# config:
src_dir="/home/hedgehog/tmp/gzip/"
dst_dir="/home/hedgehog/tmp/gzip/"

for file in `ls $src_dir | grep -v '\.gz$'`; do
if [ -e "$src_dir$file" -a ! -e "$dst_dir$file.gz" ]; then
gzip -9 -c $file > "$dst_dir$file.gz"
fi
done

Но проще использовать bzip2 или метод Veseloff. Тем более, что у такого скрипта будут проблемы с именами файлов, которые содержат пробел

  • Like 1
Link to comment
Share on other sites

#!/bin/sh

# config:
src_dir="/home/hedgehog/tmp/gzip/"
dst_dir="/home/hedgehog/tmp/gzip/"

for file in `ls $src_dir | grep -v '\.gz$'`; do
if [ -e "$src_dir$file" -a ! -e "$dst_dir$file.gz" ]; then
gzip -9 -c $file > "$dst_dir$file.gz"
fi
done

может тогда так:

#!/bin/sh

# config:
src_dir="/home/hedgehog/tmp/gzip/"
dst_dir="/home/hedgehog/tmp/gzip/"

for file in `ls $src_dir | grep -v '\.gz$'`; do
if [ -f "$src_dir$file" -a ! -f "$dst_dir$file.gz" ]; then
gzip -c9 "$src_dir$file" > "$dst_dir$file.gz"
fi
done

В «интернете» прочитал что проверка файла -f, а вот про -e ничего не нашёл или что делает -e ?

P.S. скрипт запустил, работает :)

Link to comment
Share on other sites

К своему удивлению на хостинге обнаружил, что у gzip всё же есть ключик -k позволяющий оставлять исходные файлы

У BSD gzip есть такой ключ, пользуюсь на FreeBSD серверах :) В разные Linux дистрибутивы дистрибутивы могут пихать совершенно разное окружение, видимо у вас как раз такой случай.

В «интернете» прочитал что проверка файла -f, а вот про -e ничего не нашёл или что делает -e ?

-e true если файл существует. Причем пофигу, файл это, каталог, ссылка на файл, устройство или вообще

-f true если файл существует и это обычный файл. Думаю, в вашем случае лучше использовать -f

Link to comment
Share on other sites

Зачем нужен tar для сжатия одного единственного файла?
Чтобы не удалялось

bzip2 -k тогда можно использовать или xz -k. Или bz2 не подходит?

Если на сервере есть bz2 - можно и его :) Как выяснилось, у ТС gzip поддерживает ключ -k

Как по мне, tar для сжатия одного файла не нужен. Тар, по сути, используется для хранения нескольких файлов в одном, а сжатие происходит при помощи сторонних алгоритмов. В том случае, если gzip не поддерживает флаг -k, можно использовать ключ -c в вашем скрипте с gzip вместо tar :) Выше уже написали несколько примеров (см. сообщение Veseloff)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy