← Blog of oldlisper

Простой способ демонизации lisp-процесса

· 16.12.2012 00:00
· original author: archimag

Простой способ демонизации lisp-процесса

В последнее время для создания lisp-демонов мне стал нравиться подход, основанный на использовании Supervisor (очень приятный инструмент). Здесь я покажу, как я запускаю нечто, что называю homesite.

Я создал каталог /home/andrey/development/common-lisp/homesite и разместил в нём следующие файла:

  • homesite.lisp

  • homesite

  • homesite.conf

В homesite.lisp находится код на CL, которые должен быть выполнен при загрузке системы. Например, так загружается swank:

;; homesite.lisp
(require 'asdf)

(asdf:operate 'asdf:load-op '#:swank)
(swank:create-server :port 4005
                     :coding-system "utf-8-unix"
                     :dont-close t
)

В файле homesite я разместил простой скрипт на Python, который выполняет роль загрузчика:

#!/usr/bin/env python

import os
from subprocess import Popen

os.environ.update({'HOME': '/home/andrey/'})
Popen(['sbcl', '--load', __file__ + '.lisp']).wait()

Этот код не вполне корректен и в случае проблем при загрузке SBCL остаётся висеть в памяти, но для моих целей это не страшно, а тратить на него больше времени просто лень :)

В файле homesite.conf находится конфиг для Supervisor, который можно подключить к основному конфигу в секции include .

[program:homesite]
command=/home/andrey/development/common-lisp/homesite/homesite
autostart=true
redirect_stderr=true
user=andrey

Вот, собственно, и всё.