Здравствуйте.
Прошу извинить если повторяюсь или не там пишу.
Есть скрипт, писаный на PERL, в задачи которого входит с периодичностью считывать данные с log файла, вставлять их в БД MySQL и считанное удалять.
Если желание написать службу, которая бы:
1. слушала(перехватывала) поток и писала бы данные в БД;
2. писался/не писалcя log, в зависимости от заданных параметров в другом файле;
3. работал быстро. Скрипт может работать определенные секунды, а может поначалу медленно, но а потом время работы постепенно возрастает.
4. работал в "реальном времени" а не с периодичностью.
Вся загвоздка в том, ни разу такого не писал и не знаю ни на чем писать ни вообще с чего начать. Может есть где-нить дока какая по написанию служб вообще, короче нужна консультация и направление на "путь истинный"...
На счет выбора языка программирования. Где-то год назад знакомый сказал что С++ работает быстрее, месяц - два назад услышал опровержение, что все наоборот. Вот теперь и не знаю какой выбрать.
>Здравствуйте.Здравствуйте.
>Вся загвоздка в том, ни разу такого не писал и не знаю
>ни на чем писать ни вообще с чего начать. Может есть
>где-нить дока какая по написанию служб вообще, короче нужна консультация и
>направление на "путь истинный"...Если скрипт на перле писали вы, то будет немного проще. Почитайте книги по программированию в Unix/Linux. Могу порекомендовать "UNIX. Профессиональное программирование" Стивенса и Раго.
>На счет выбора языка программирования. Где-то год назад знакомый сказал что С++
>работает быстрее, месяц - два назад услышал опровержение, что все наоборот.
>Вот теперь и не знаю какой выбрать.При сравнении C и C++ разница в скорости будет практически незаметна.
Кто пишет лог в файл, который вы хотите обрабатывать?А вообще, такие вещи обычно делаются с помощью syslog. И писать ничего не надо - всё уже написано.
Зачем для такой задачи C/C++? Все делается на perl в два счета и работает с той же скоростью что на сях и даже асме. Попробуйте немного подумать и может быть сами поймете почему. А начинать надо с четкой постановки задачи.
есть такой вариант:
вместо лог-файла создаёте именованный канал с таким же именем (см. man mknod или man mkfifo)
после чего создаёте процесс-читатель, который заносит данные в б/д или ещё куда.
процессом-писатель при этом и не догадывается, что пишет не в обычный файл.
также man pipe, man tee и т.д. могут помочь с этим
Есть минус - при отваливании процесса-читателя процесс-писатель получает SIGPIPE.
>Есть минус - при отваливании процесса-читателя процесс-писатель получает SIGPIPE.минусы есть всегда. значит надо писать так, чтобы не отваливался. :-D
если применять методы, как и при программировании серверов (листенеры, процессы, потоки, ipc), то получится если и не супер-надёжно, то уж приемлемо точно.есть и другие варианты.
если бы не указанный в топике бзд, можно было бы предложить Inotify http://ru.wikipedia.org/wiki/Inotify
также есть вариант с fuse. написать для него фс не так сложно, как кажется.
ах да.
может там вообще хватит что-то типа такого:
tail -f <log_file> | <своё_скрипт_записи_в_субд>
и никакого С ;-)
> Где-то год назад знакомый сказал что С++ работает быстрее, месяц - два назад услышал опровержение, что все наоборот.C++ разумеется быстрее. Только толку от этого, если большую часть работы будет все равно выполнять mysql, а приложение будет чуть более чем ве время висеть в ожидании данных? А разработка на C++ медленнее, особенно если вы сами не понимаете что вам нужно. Поэтому оставьте на perl + прикрутите Proc::Daemon и все остальное чего не хватает по вкусу.