nohup SBCL Ubuntu не может читать со стандартного ввода - PullRequest
4 голосов
/ 17 марта 2010

В 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 или файл и использования параметра командной строки скрипта, но я не совсем понимаю, что происходит.

Как мне запустить sbcl из командной строки на linux с nohup и сохранить работу repl (веб-сайта)?

Ответы [ 3 ]

3 голосов
/ 17 марта 2010

Веб-структура RESTAS («Сервер приложений REST») Андрея Москвитина содержит код для правильной демонизации экземпляра SBCL. См. http://github.com/archimag/restas/blob/master/contrib/restas-daemon.lisp. Вы можете легко отрывать детали, относящиеся к RESTAS.

2 голосов
/ 18 марта 2010

Вы можете запустить SBCL в Экран Gnu , а затем отключиться от сеанса.

Это также дает вам возможность присоединиться к вашему REPL позже.

1 голос
/ 25 марта 2010

Dmity-vk отправил меня на правильный путь, спасибо. SBCL пытается запустить repl при запуске и читает из стандарта in. При использовании nohup стандарт in перенаправляется и не может быть прочитан. Затем SBCL переходит к отладчику, который пытается читать из стандарта в ... отсюда и бесконечный цикл. Тег --script близок к решению этой проблемы, за исключением того, что он имеет (quit) после прочтения скрипта. Поэтому я включил бесконечный цикл в свой сценарий и вуаля.

так что на сервере Ubuntu с sbcl это должно позволить вам запустить сервер 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)))
...