LINUX.ORG.RU

Получить лог


0

2

Здравствуйте, уважаемые Гуру... подскажите пожалуйста новичку... Есть ли какая то возможность перенаправить вывод сообщений процесса? Объясняю: Например обычный top запустить так: top >/dev/null 2>&1&, все сообщения(вывод) уйдет в небытие, так вот вопрос, можно ли как то в процессе выполнения этого процесса поменять ему временно вывод , например в файл, затем опять поставить вывод в небытие(/dev/null) без остановки выполнения процесса?

Спасибо


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

top | $filter_command >logfile

Скажем, если важно наличие определённого файла (сигнального), фильтр-скрипт будет примерно таким:

#!/bin/bash
$WATCHED_FILE="/tmp/some.file"
while read line; do
    [ -f "$WATCHED_FILE" ] && echo $line
done
schizoid ★★★
()

Я бы сразу сделал вывод в файл script >> temp.log, но ввиду большого количества выводимой информации (и большой скорости) файл слишком быстро заполняется и начинается все притормаживать (харды не справляются)... по этому нужно в определенный момент подключиться к процессу, в течение секунд 1-2 записать все что происходит (вывод) в файл и сразу отключиться , дальше файл расперсить не проблема, мне бы понять как лучше (и можно ли вообще) проделать такую операцию.

По-сути, есть только ID процесса ... :(

Amazik
() автор топика

т.е. в определенный момент как то перенаправить вывод процесса в файл,затем обратно выводить в null

Amazik
() автор топика

Есть же ещё named pipes:

$ mkfifo test.fifo
$ while true; do date; sleep 1; done >test.fifo &
[1] 11187
$ date
Суб Дек 17 16:54:11 EET 2011
$ cat test.fifo >>test.fifo.log
^C
$ date
Суб Дек 17 16:54:34 EET 2011
$ cat test.fifo.log 
Суб Дек 17 16:54:22 EET 2011
Суб Дек 17 16:54:23 EET 2011
Суб Дек 17 16:54:24 EET 2011
Суб Дек 17 16:54:25 EET 2011
Суб Дек 17 16:54:26 EET 2011
Суб Дек 17 16:54:27 EET 2011
Суб Дек 17 16:54:28 EET 2011
Суб Дек 17 16:54:29 EET 2011
Суб Дек 17 16:54:30 EET 2011
schizoid ★★★
()
Ответ на: комментарий от schizoid

strace -s 128 -f -p <pid> и СМОТРИШЬ :). Ну, можно ещё с ключами поиграться и отлавливать только write(). Или systemtap натравить.

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

Если не ошибаюсь, у fifo маленькие буфера. По-моему, 4кб. Т.е. как забьётся запись заблочится, не?

Не должна. Если к нему не привязан читатель, то весь поток смывается как раз в /dev/null. Для работы должны оба присутствовать: и читатель, и писатель.

strace -s 128 -f -p <pid> и СМОТРИШЬ :)

Круто :) Ещё один скринсейвер.

schizoid ★★★
()

Большое спасибо... Но задача сводилась к тому, что процесс (у которого надо поменять вывод) сам пишет разные информационные сообщения вот их то и надо получать, а с помощью strace получается только дебаг всего приложения...

Скорее всего надо идти в сторону screen

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

Я думал демон уже запущен и надо было кровь из носа получить с него инфу. Конечно strace это костыль.

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.