Как я могу использовать sed в качестве демона или сервиса для разбора входящих JSON строк? - PullRequest
0 голосов
/ 06 апреля 2020

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

Я понимаю, что мог бы просто иметь скрипт, который запускает sed в качестве фонового процесса. Но, похоже, что запуск и повторный запуск процесса повлечет за собой дополнительные затраты, что приведет к снижению производительности. Я думаю, что запуск sed в качестве демона или службы может позволить мне с удобством использовать существующий и хорошо проверенный инструмент при максимальной производительности системы.

Кроме того, если для этой цели лучше подойдет awk или другой существующий инструмент, я открыт для других вариантов. Но я бы хотел, чтобы это был хорошо проверенный инструмент Linux / Unix, если это возможно, просто чтобы не изобретать колесо.

Я прочитал ТАК вопрос . И этот относительно запуска emacs как демона. Но, похоже, ни один из них не работает на седь.

Я также подумал о том, чтобы передать демон stdin в sed, но не уверен, что это лучший подход.

ОБНОВЛЕНИЕ Ключевой вопрос, который я пытаюсь спросить, заключается в следующем: как я могу запустить sed, awk или jq в качестве демона, чтобы я мог передать ему множество строк без необходимости издержки запуска нового процесса?

1 Ответ

1 голос
/ 07 апреля 2020

(это было слишком много для комментария)

Насколько я понимаю, эти классические c unix инструменты для обработки текста, такие как sed, awk et c, являются записывается как фильтры, которые обрабатывают входной поток и создают выходной поток. Они не созданы для того, чтобы быть демонами, они завершаются после обработки входного потока. EOF на входном потоке со временем прекратит работу фильтра. Таким образом, вам придется держать эту трубу открытой .

Если вам не нравится идея обертывания инструмента сценарием оболочки, возможно, функциональность, необходимая для поддержания трубы открытой, превратить процесс в демон, а затем закрыть дескриптор открытого файла, чтобы корректно завершить процесс, который может быть реализован в конструкторе / деструкторе (init / fini) разделяемой библиотеки, которую можно предварительно загрузить (с помощью LD_PRELOAD) во время работы инструмента.

Если вы решите реализовать нечто подобное, проект daemonize может стать хорошей отправной точкой.

...