Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

LinkFly/daemonization

Open more actions menu

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 (linkfly1@newmail.ru).

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).
Успешного использования!

Вопросы и пожелания пишите на linkfly1@newmail.ru
Для баг репорта используйте https://github.com/LinkFly/daemonization/issues
или указанный e-mail.

About

Daemonization lisp-processes (without screen/detachtty)

Resources

License

Stars

Watchers

Forks

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.