假设有一个 Web 应用程序在 VPS 上运行,并使用 Linux 作为
systemd
服务,或者任何最适合它的服务。是否可以使用新的 REPL 实例访问正在运行的 Lisp 映像,或者以某种方式重新打开用作应用程序入口点的实例?
我想象有一个
run.lisp
fie,由 systemd
执行,具有以下代码:
(ql:quickload <system-dependencies>)
(asdf:load-asd "system-name.asd")
(ql:quickload :system-name)
(main)
主要函数将在哪里运行,比方说,带有波尔多线程的 hunchentoot。
我假设有一种方法可以将后台进程带到前台,打开正在运行的 REPL 并重新定义现有函数。然后我还必须修改一个包含原始函数定义的文件,以便在重新启动时保留更改。
我最不想做的就是关闭网络应用程序并重新启动它。我可以编写一个优雅的退出过程,以便在应用程序终止时完成所有重要任务并保存进度。这是一个选项,但考虑到 Lisp 就是 REPL,这真的是它吗?
是的。 我见过在这样的设置中运行多年的 Web 服务。 CL-daemonize、detach-tty 可能会让人感兴趣。 让粘液监听器保持打开状态很有用。 与 Emacs 一样,带有一些端口转发功能。 虽然需要工作的事项清单很大,但并不比任何其他长时间运行的可升级软件系统长。 Common Lisp 给他带来的好处是你可以在令人惊讶的程度上修改正在运行的系统。