← Архив: Common Lisp

Проект "daemonization"

Author: · 22.01.2011 17:32
· original author: LinkFly
    Приветствую всех форумчан. В связи с замеченным проявлением интереса к этой теме (к теме демонизации), хочу представить свой проект, предназначенный для демонизации лисп-процессов. Сразу оговорюсь - проект не готов, не отлажен и прочее. Но при этом готов концептуально.
Проект притендует на многое и поэтому является весьма спорным. Интересно то, что если бы мне рассказали бы о целях проекта (до того как у меня созрела идея его реализовать) - моё отношение
к этому было бы в высшей степени скептическое вплоть до полного его игнорирования. Однако,
в процессе созревания концепции проекта я понял что, при хорошем и лаконичем дизайне проекта,
адекватном поставленным целям я мог бы создать некоторую рабочую базу для постепенного доведение проекта до полного завершения (надеюсь не только собственными силами). Проект мне представляется не супер-полезным и супер-нужным, но всё же полезным и нужным. Кроме того, один из стимулов его реализации, это попытка ответа на вопрос: "Что есть хорошая архитектура проекта в кроссплатформенном системном программировании на Common Lisp". Звучит правда, несколько пародоксально :) 
Вот несколько строк из README проекта:
Система предназначена для инкапсуляции всего функционала связаного с "демонизацией" лисп-процесса без
использование screen/detachtty, нацелена на работу на как можно большем кол-ве lisp-систем
и операционных систем. Во многом базируется на коде из restas-daemon.lisp
(копирайт Москвитин Андрей <archimag@gmail.com> распространяется под лицензией LGPL.)
[1] https://github.com/archimag/restas/blob/master/contrib/restas-daemon.lisp
-----------------
Описание файлов:

А вот собственно ссылки на README (который будет изменяться) и на сам проект:
https://github.com/LinkFly/daemonization/blob/master/README
https://github.com/LinkFly/daemonization
· original author: archimag
Ключевой вопрос - какая есть потребность в данном проекте? 
Просто, лично я не могу работать над тем, что мне не нужно. В плане демонизации мне нужно ровно то, что у меня сейчас есть. Я изначально хотел сделать более универсальную схему, но потом заметил множество проблем, в преодолении которых я совершенно лично не заинтересован. Поэтому решил делать более просто.
ИМХО, проект в описанном виде, вряд ли будет интересен большому количеству разработчиков. 
· original author: LinkFly
Лично у меня потребность в следующем:
Полностью отделить демонизацию в restas-daemon.lisp от restas-специфичных вещей (и вообще от более высокоуровнего кода). Нужно это вследствии того,что мне необходимо расширять restas-daemon.lisp, а делать это работая с одним файлов не удобно (тем более содержащем множество низкоуровневого системного кода). Расширения предполагаются (кое-что уже используется в моей версии restas-daemon.lisp) как связанные с restas, с другим высокоуровневым кодом, так и связанные с демонизацией. Кроме того, мне нужна "закладка" - после того как будет полностью доделана работа системы на linux/sbcl, я хочу иметь возможность (при необходимости) быстрой и удобной доводки  до работы на другой лисп-системе как минимум и другой ОС как максимум. Далее планируется сделать restas-daemon-ext (файл или ASDF-систему - по ситуации), который будет использовать daemonization и сам будет использоваться вышележащей системой/модулем.
> ИМХО, проект в описанном виде, вряд ли будет интересен большому количеству разработчиков.
Очевидно в незавершенном виде только разве что писавшим/переписывающим/изучавшим restas-daemon.lisp и интересующимся системным программированием в CL/sbcl.
· original author: LinkFly
> и сам будет использоваться вышележащей системой/модулем.
Круто сказано ) На самом деле будет просто несколько shell-скриптов :)
· original author: LinkFly
> и сам будет использоваться вышележащей системой/модулем.
Круто сказано ) На самом деле будет просто несколько shell-скриптов :)
· original author: archimag
> Нужно это вследствии того,что мне необходимо расширять restas-daemon.lisp, 
Хм, зачем? Может проблему можно решить без изменения демона?
· original author: LinkFly
Да собственно по настоящий момент так и делается. И речь идет не конкретной одной проблеме, а о множестве появляющихся задач. Так или иначе, а идея инкапсуляции всего связанного с демонизацией (и закладка для расширения для других лиспов/осей) - представляется достаточно "вкусной".
· original author: archimag
> И речь идет не конкретной одной проблеме, а о множестве появляющихся задач.
Слишком абстрактно. Можно пример?
> идея инкапсуляции всего связанного с демонизацией ... - представляется достаточно "вкусной".
Она была бы "вкусной", если бы мы имели множество серверов, работающих под разными системами, и имели бы проблемы в обслуживании из-за необходимости постоянного учёта особенностей систем. Я не знаю кто может похвастаться тем, что имеет подобную ситуацию )
· original author: LinkFly
Например: я как-то добавил новый параметр - путь по которому располагаются либы. Причём нужно было чтобы не было требований к иерархии систем, то есть чтобы они располагались произвольным образом и чтобы не нужно было при любом изменении дерева каталогов править какие-то конфиги (это как раз то, что было добавлено в ASDF2). Причем по некоторым причинам удобно было задавать путь именно в общем конфиге. В определённой ситуации (при использовании демона) случался глюк: проход по директориям зависал. Было исправлено переносом соотв. кода в другое место в файле. Глюк был связан с какими то низкоуровневыми нюансами, разбираться с которыми было совершенно не кстати. В итоге для решения достаточно высокоуровневой задачи пришлось работать с низкоуровневым кодом. Что было совершенно не удобно. Может быть не самый лучший пример, но имеет место (были ещё преценденты). И нужны ещё расширения, а с ростом объёма файла сложность редактирования и вероятность "сюрпризов" возрастает.
Да и вообще инкапсуляция такого понятия как демонизация в отдельную систему кажется совершенно очевидной и удобной. Согласен что с целью "работа на всех лиспах и ОСях" можно спорить. Однако при хорошем разделении на слои (что уже сделано) в этом (ИМХО) есть смысл.
> Она была бы "вкусной", если бы мы имели множество серверов, работающих под разными системами, и имели бы проблемы в обслуживании из-за необходимости постоянного учёта особенностей систем. Я не знаю кто может похвастаться тем, что имеет подобную ситуацию )
Мне не хотелось бы чтобы запуск лисп-системы как демона был намертво привязан к ОСи и лисп-системе. Логично для библиотеки предназначенной для общего пользования стремится к работе в разных условиях. И не хотелось бы при любой смене конфигурации "разводить руками" и тратить время на написание своего restas-daemon. Понятно что всего не предусмотришь, но иметь некоторую основу, которую можно относительно быстро "про- апгрейдить" до работы в нужных условиях - хотелось бы. Степень готовности такая, что довести до полноценной работы на linux/sbcl не очень трудоёмко. А если появятся пользователи у которых будет необходимость работы на другой конфигурации и они добавят соотв. код - то это же вообще шоколадно.
Как я уже отмечал выше: библиотека не сверхполезная, но полезная, мне по крайней мере нужна. Да, и видимо не только мне одному:
http://www.cliki.net/Vladimir%20Sedach
His Common Lisp projects-that-would-be-cool list:
...
Portable cross-platform server daemonization library ala RESTAS-daemon (because screen/detachtty isn't always a good thing)
· original author: vsedach
Лично я хочу даемонизацию что бы использовать daemontools supervise или runit на Линуксе с SBCL, CCL, и CLISP. Я пробовал наладить supervise со screenом но ни как не смог их совместить. Было бы приятно если будет поддержка FreeBSD. А дальше добавить OpenBSD, OpenSolaris и тд тогда будет не трудно. Думаю нет смысла разрабатывать это для винды и OS X тк там все по другому и уже есть коммерческие разработки от Franz и LispWorks.