Простой способ демонизации lisp-процесса
В последнее время для создания lisp-демонов мне стал нравиться подход, основанный на использовании Supervisor (очень приятный инструмент). Здесь я покажу, как я запускаю нечто, что называю homesite.
Я создал каталог /home/andrey/development/common-lisp/homesite и разместил в нём следующие файла:
homesite.lisp
homesite
homesite.conf
В homesite.lisp находится код на CL, которые должен быть выполнен при загрузке системы. Например, так загружается swank:
(require 'asdf)
(asdf:operate 'asdf:load-op '#:swank)
(swank:create-server :port 4005
:coding-system "utf-8-unix"
:dont-close t)
В файле homesite я разместил простой скрипт на 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
Вот, собственно, и всё.