воскресенье, 20 сентября 2009 г.

Common Lisp Daemon. Часть 2.

В предыдущей части я рассказал о преодолении основных технических трудностей, возникающих при создании lisp-демонов. Теперь я готов опубликовать код законченного lisp-демона. Полный код можно посмотреть здесь: http://lisper.ru/apps/format/15. Это реальный код, который используется для запуска сайта lisper.ru. Как мне кажется, код достаточно тривиален и по структуре в основном соответствует структуре демонов, написанных на языке C (информацию о принципах разработки демонов на языке С легко найти в сети). Отдельно хотел бы отметить, что данный демон позволяет запускать hunchentoot на 80-ом порту уже после отказа от root-привилегий, что достигается за счёт использования библиотеки libcap (версии 2). При использования данного демона нет необходимости в вспомогательных средствах: GNU Screen, detachtty и т.п. (которые традиционно рекомендуются для решения данной проблемы). Ну и данный код, в том числе, можно рассматривать как пример системного программирования на Common Lisp :) К сожалению, в код пришлось добавить пару платформо-зависимых констант, но я надеюсь при случае написать патч для SBCL, после чего необходимость в этом отпадёт.

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

3 комментария:

  1. sb-posxi, кнечно, штука очень ценная. Но как быть с другими имплементациями. Есть, например, iolib.syscalls, может стоит поробовать с этими обёртками для posix API?

    ОтветитьУдалить
  2. > Но как быть с другими имплементациями
    Демонизация штука тонкая :) Я склоняюсь к тому, что для каждой реализации должен быть отдельный скрипт...

    ОтветитьУдалить
  3. Палка о двух концах. С одной стороны удобно было бы использовать убёртку, чтобы написать "демонизирующий код" сразу для нескольких реализаций. С другой стороны было бы правильно чтобы лисп-система настроила бы себя необходимым образом, в частности лишила бы root привелегий, а затем пошли бы уже всяческие ASDF, обёртки и т.п. ...

    ОтветитьУдалить