4

在 Ubuntu 上,我用线程编译了 sbcl 1.0.35。我可以愉快地从命令行使用 sbcl,并且我的 hunchentoot 网站可以使用线程,但是当我注销时它就消失了。当我尝试 nohup sbcl

nohup ./src/runtime/sbcl --core output/sbcl.core

我明白了

(SB-IMPL::SIMPLE-STREAM-PERROR “无法从 ~S 读取”#9)

我尝试了将标准输入重定向到 /dev/null 或文件并使用脚本命令行选项的各种组合,但我不太明白发生了什么。

如何使用 nohup 从 linux 上的命令行启动 sbcl 并保持我的 repl(website) 运行?

4

3 回答 3

3

Andrey Moskvitin 的 RESTAS Web 框架(“REST 应用程序服务器”)包含正确守护 SBCL 实例的代码。请参阅http://github.com/archimag/restas/blob/master/contrib/restas-daemon.lisp。您可以轻松撕下 RESTAS 特定的部分。

于 2010-03-17T03:09:15.233 回答
3

您可以在Gnu Screen中启动 SBCL,然后从会话中分离。

这也使您可以稍后重新附加到您的 REPL。

于 2010-03-18T14:56:13.690 回答
1

Dmity-vk 让我走上了正确的道路,谢谢。SBCL 在您启动时尝试启动一个 repl,并从标准输入中读取。当您使用nohup标准输入时,它会被重定向并且无法读取。SBCL 然后下降到调试器,该调试器尝试从标准中读取......因此是无限循环。该--script标签接近于解决这个问题,只是它有一个(quit)一旦脚本被读取。所以我在我的脚本中放了一个无限循环,瞧。

所以在带有 sbcl 的 ubuntu 服务器上,这应该让你启动一个 hunchentoot 服务器

sudo nohup ./run-sbcl.sh --script foo.lisp > /dev/null 2> /dev/null &

其中 foo.lisp 的最后一行类似于

(defvar *alive* t)

(loop (sleep 1000) (if (not *alive*) (quit)))
于 2010-03-25T06:57:36.863 回答