Coder Social home page Coder Social logo

daemonization's Introduction

Система в разработке (пока работает только на 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.

daemonization's People

Contributors

linkfly avatar rigidus avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.