-
Notifications
You must be signed in to change notification settings - Fork 3
/
README
139 lines (90 loc) · 7.31 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
Система в разработке (пока работает только на 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.