-
Notifications
You must be signed in to change notification settings - Fork 3
Daemonization lisp-processes (without screen/detachtty)
License
LinkFly/daemonization
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Система в разработке (пока работает только на SBCL/Linux/x86). Система предназначена для инкапсуляции всего функционала связаного с "демонизацией" лисп-процесса без использование screen/detachtty, нацелена на работу на как можно большем кол-ве lisp-систем и операционных систем. А также для запуска и управления демонами из лисп-системы. Во многом базируется на коде из restas-daemon.lisp (который распространяется под лицензией LGPL https://github.com/archimag/restas/blob/master/contrib/restas-daemon.lisp). ------ Требования: --------------------------------------------------------------- Требуется установленный в системе SBCL. Тестировалось в sbcl-1.0.42 и в sbcl-1.0.47. ------ Командный интерфейс для Линукс (в scripts/): ------------------------------ ./daemon.sh <conf-file> <command> <conf-file> - файл содержащий конфигурацию демона в списке свойств (см. scripts/daemon.conf и examples/example1.conf) <command> - одна из следующих команд: start - запуск демона. stop - остановка демона. zap - очистить ресурсы после некорректно завершённой работы (удалить pid файл). kill - аварийная остановка демона (применяется если не срабатывает команда stop). restart - перезапуск демона. status - получить информацию о работе демона. nodaemon - не запускать демон, а только выполнить пользовательский код соответствующий ключу :main-function в конфиге демона (используется для отладочных целей). Пример: ./daemon.sh daemon.conf start ------ Программный интерфейс для Лисп-системы ------------------------------ (daemonized <conf-params> <daemon-command> &key on-error print-extra-status) conf-params - файл с конфигурацией демона или список св-в. daemon-command - команда демонизации, тоже что для командного интерфейса. on-error - одно из сл. значений :return-error :as-ignore-errors :call-error или :exit-from-lisp. По умолчанию :call-error. print-extra-status - позволяет выводить больше информации. По умолчанию NIL. Пример: (daemonization:daemonized '(:pid-file "/home/user/pids/my-pid-file" :main-function #.(lambda (load "/home/user/start-swank.lisp"))) "start") ------ Рекомендации по использованию ---------- 1) Запустить тесты. cd tests/ ./run-tests.sh sudo ./root-run-tests.sh your-user-name В случае успешного прохождения тестов в конце каждого вывода появится сообщение: ... Tests passed. В случае, если тесты не прошли (появится сообщение " ... Tests failed."). В этом случае, пожалуйста, вышлите описание системной конфигурации и логи, которые появятся после запуска в пользовательском (tests-prompts.log, tests-syslog.log) и административном (root-tests-prompts.log, root-tests-syslog.log ) режимах на e-mail ([email protected]). 2) Запустить пример. cd ../examples/ Заменить путь загружаемого файла в example1.conf (например с инициализацией и запуском swank-сервера для работы в Slime) на свой собственный: (:main-function #.(lambda () (load "your-path-you-lisp-or-fasl-file") ... Запустите демон: ./example1.sh start В случае успешного запуска появится сообщение вроде следующего: success started (pid = 29591) Перед ним могут появится сообщения типа "STYLE-WARNING: Couldn't grovel ...". Это никак не связано с системой daemonization, а связано с нюансами работы sbcl. Теперь можно проверить, что демон успешно работает командой status: ./example1.sh status В случае успеха появится сообщение вроде: running (pid = 32668) Если что-то пошло не так и демон не запустился появится одно из следующих сообщений: not-running - no pid file или: not-running Если появилось последнее, то это говорит о том, что файл с записью идентификатора процесса остался, но сам демон по каким-то причинам не запустился. Следы работы демона (в данном случае pid-файл) следует удалить командой zap: ./example1.sh zap Причины по которым не запустился демон скорее всего тривиальны. Проверьте что указан правильный путь к файлу в описанном выше вызове: (load "your-file") и убедитесь в том, что открываемый swank-порт не занят. Если появилось сообщение running и в (load ...) загружался файл с запуском swank-сервера, то можно смело к нему коннектиться. По окончании работы демон останавливается так: ./example1.sh stop В случае успеха должно появится сообщение: success stop В противном случае, в зависимости от ситуации, появится одно из сообщений: failed stop - no pid file или failed stop Теперь команда: ./example1 status Должна вывести сообщение: not-running - no pid file Для быстрого запуска необходимо загрузить asdf-систему в лисп-образ и сохранить его. Для чтения подробных логов можно использовать скрипт contrib/linux/read-log.sh Из Лисп-системы лог инициализации в виде списка можно получить вызвав функцию (daemonization:get-daemon-log-list). Успешного использования! Вопросы и пожелания пишите на [email protected] Для баг репорта используйте https://github.com/LinkFly/daemonization/issues или указанный e-mail.
About
Daemonization lisp-processes (without screen/detachtty)
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published