Folks--
I want to be able to start/stop a tbnl based app via a script. I've done this before with my own server apps, so it all seems relatively straight forward. In other words, I have a Makefile which builds a core, copies shared-libs, packages it all up in a tarball, etc, etc, such that I can deploy the app on any machine, regardless of whether or not SBCL is installed.
The problem is that (start-tbnl) starts up a thread, then returns, and with that return, sbcl quits, and I got no daemon.
Is there a way to start tbnl without it returning?
I suppose I can do something like:
(defun daemon-start () (tbnl:start-tbnl) (wait-forever))
and then let my init.d script send a kill signal as I've already planned. Is that the recommended method (assuming I can find a wait-forever function, or just (read) or something)?
In case it needs be said, I really value running tbnl inside a repl with slime and all that, but this is for the case where that's not desired or necessary.
Thanks for any lore about what you all do in a similar case! ;)
Keith
Well, I solved this one. Not saying it's the best solution, but it goes something like:
(defvar *waiter* (make-waitqueue)) (defvar *locker* (make-mutex))
(defun unix-signals (sig code scp) (declare (ignorable code scp)) (handler-case (condition-notify *waiter*) (condition (c) (format *standard-output* "~a" c))) (sb-ext::quit))
(defun daemon-mode-start () (load-sample-data) (sb-sys:enable-interrupt sb-unix:sighup #'unix-signals) (sb-sys:enable-interrupt sb-unix:sigterm #'unix-signals) (sb-sys:enable-interrupt sb-unix:sigkill #'unix-signals) (tbnl:start-tbnl) (with-mutex (*locker*) (log-message :debug "wait mode") (condition-wait *waiter* *locker*) (log-message :debug "terminated.") (tbnl:stop-tbnl) (sb-ext::quit)))
*Shrug*. Good enough for now! ;)
Keith
On Mon, 2006-01-30 at 12:17 -0800, Keith Irwin wrote:
Folks--
I want to be able to start/stop a tbnl based app via a script. I've done this before with my own server apps, so it all seems relatively straight forward. In other words, I have a Makefile which builds a core, copies shared-libs, packages it all up in a tarball, etc, etc, such that I can deploy the app on any machine, regardless of whether or not SBCL is installed.
The problem is that (start-tbnl) starts up a thread, then returns, and with that return, sbcl quits, and I got no daemon.
Is there a way to start tbnl without it returning?
I suppose I can do something like:
(defun daemon-start () (tbnl:start-tbnl) (wait-forever))
and then let my init.d script send a kill signal as I've already planned. Is that the recommended method (assuming I can find a wait-forever function, or just (read) or something)?
In case it needs be said, I really value running tbnl inside a repl with slime and all that, but this is for the case where that's not desired or necessary.
Thanks for any lore about what you all do in a similar case! ;)
Keith _______________________________________________ tbnl-devel site list tbnl-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/tbnl-devel
Keith Irwin keith.irwin@gmail.com writes:
Is there a way to start tbnl without it returning?
Have you looked at detachtty/attachtty?