LINUX.ORG.RU

Даталоггер с ограниченным количеством строк


0

0

Всем привет!

Нужно что-то вроде syslogd, которое слушает UDP порт и записывает сообщения в лог-файл. Когда файл набирает, напримет, 1000 строк, первая строка из файла удаляется. Есть ли что-то такое готовое? syslog+cron не подходят, так как приложение будет работать во встроенной (embedded) системе c ограниченными ресурсами.

Всем спасибо,
velik


А не проще ли тогда свое на сокетах написать? Там делов-то - открыть сокет и все входящие в файл записывать, зато лишнего не будет. Все это с отладкой максимум за один рабочий день пишется.

MuZHiK-2 ★★★★
()
Ответ на: комментарий от alex_custov

Normally, logrotate is run as a daily cron job.

Его, похоже, придётся тоже «вручную» запускать :(

Пока склоняюсь к «писать самому», а то гугль ничего толкового не находит.
Тут походу ещё вопрос:То ли лыжи не едут, то ли я что что не понимаю, но как обрезать файл с начала? Я знаю только функцию truncate(), которая обрезает конец, а как уменьшить файл на длину первой строки, не переписывая файл в новый?

Всем спасибо

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

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

sdio ★★★★★
()

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

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

ОЗУ достаточно. Где-то 32Мб будет. Но лог файл однозначно должен писаться во флэш, в ОЗУ его кэшировать неразумно: вдруг система обвалится и лог как раз поможет понять отчего...

Странно, никак не найду возможность обрезать начало файла. По-моему это технически нереализуемо: начало файла лежит в каком-то кластере, и теперь я хочу, к примеру, обрезать в начале на размер полкластера. В этом случае придётся «сдвигать» всё содержимое на полкластера. А это, похоже, не так просто, как удалить конец файла.

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

любопытно было бы найти файловую систему (или патч к какой-либо), в которой можно через ioctl отрезать по сектору/кластеру с начала файла.

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

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

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

>>макс. 2 часа.

Зачем спешить на работе? Лучше все сделать качественно.

MuZHiK-2 ★★★★
()
Ответ на: комментарий от velikS

Какие-то извращения ты придумываешь.
Первое и самое просто что пришло в голову, это создать одно-связный список и указатель на его голову, при достижении какого-то значения голову передвигаешь к следующему, а предыдущей удаляешь, список загружаешь/сохраняешь в свой файл.

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

Что-то мне подсказывает, что речь об embeded. Если так, возможно, лучшим вариантом будет сбрасывать буфер с логами на флеш по {somthing}abort.

vaulter
()

syslog-ng и metalog подобное вроде умели. Погляди документацию. Хотя могу и ошибаться.

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

Сразу видно товарища PC-Программиста ;-) Приколись, сколько ресурсов будет кушать такое приложение, которое список держит в RAM, а при каждом сообщении спишет файл целиком. Не, нам такое не подойдёт :)

Да, речь об embedded. Посмотрю syslog-ng и metalog. Спасибо за идею

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

Metalog is a modern replacement for syslogd and klogd. Log files can be automatically rotated when they exceed a certain size or age.

Похоже, что доктор прописал :)

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

> Но лог файл однозначно должен писаться во флэш, в ОЗУ его кэшировать неразумно: вдруг система обвалится и лог как раз поможет понять отчего...

Система — это конкретно эта программа? Сигналы SEGV, BUS и т.п. можно перехватывать и записывать лог в файл, перед тем как падать. Флеш-память же имеет очень ограниченный срок службы, нет?

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

Приколись, сколько ресурсов будет кушать такое приложение, которое список держит в RAM


немного

а при каждом сообщении спишет файл целиком.

можешь писать при определённых событиях

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

(гипотеза) смотри флэш не убей. Это на десктопах ssd оптимизированы под свякие файлы подкачки итп. А на embeded может быть какой-нить слабый контроллер флэш который будет писать в одно и тоже место и быстро ушатает память.

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