LINUX.ORG.RU
ФорумAdmin

Нужен скрипт..

 ,


0

1

Доброго времени суток! Я не силён в баше (первый раз столкнулся), а нужен скрипт. Вопрос такого рода. Есть файл messages, в него сыпется куча логов, в том числе и smbd_audit. Нужно строки касающиеся smbd_audit записывать каждых несколько часов в отдельный файл. Название файла желательно чтобы было временем его создания. Буду благодарен за помощь по существу и заодно посоветуйте литературу по башу. Man не уверен что зайдёт со старта…


Но ведь можно просто перенаправить эти логи в другой файл стандартными средствами. Если это действительно лог самбы, то в файле /etc/rsyslog.d/smdd_audit.conf внести строку:

local5.notice -/var/log/samba/audit.log

После перезапустить службу rsyslog, проверить наличие файлов и попадание нужных сообщений туда.
Ну и ротацию потом настроить.
А имя файла по времени создания - посмотрите какие-нибудь how to по rsyslog

Aborigen1020 ()
Ответ на: комментарий от Prosto_user

Нафига костыли из скриптов городить? ТС, какой у тебя дистрибутив? То, что ты хочешь (запись логов определенного типа в отдельный файл) из коробки умеет большинство демонов логирования.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Prosto_user

Теперь вопрос к тебе

Подскажу: Зачем ТС скрипт? ТС точно знает, что ему нужен скрипт? ТС-у нужен лог или скрипт? Какие буквы ты распарсить не смог?

anonymous ()
Ответ на: комментарий от anonymous

Последняя попытка.

Философскими вопросами по типу этих:

Зачем ТС скрипт? ТС точно знает, что ему нужен скрипт? ТС-у нужен лог или скрипт?

я не задавался. ТС попросил скрипт, я – подкинул инфу.

Ещё раз: «ТС попросил скрипт, я – подкинул инфу.»

Для непробиваемых: «ТС ПОПРОСИЛ СКРИПТ, Я – ПОДКИНУЛ ИНФУ.»

Prosto_user ★★ ()
Ответ на: комментарий от ErV

А я скрипт тебе придумал:

tail -f messages | grep smbd_audit > temp_file &
PID=$!

while true; do
    sleep 2h
    kill -stop $PID
    cp temp_file smbd_audit_$(date +%s).log
    truncate -s 0 temp_file
    kill -cont $PID
done

Чтобы избежать разрывов строк, надо, наверное, сравнивать время для каждой строки.

anonymous ()
Ответ на: комментарий от ErV

Пож :) Вот с проверкой времени на каждой строке:

INTERVAL=$((2*60*60))
START_TIME=0
grep smbd_audit messages | while read LINE; do
    TIME=$(date +%s)
    if ((TIME - START_TIME >= INTERVAL)); then
        START_TIME=$TIME
    fi
    echo $LINE >> smbd_audit_${START_TIME}.log
done
anonymous ()