我有一个 RingoJS 网络服务器(在 Jetty 上运行),它是 Apache 反向代理设置的一部分。
我希望多个 Ringo 进程能够在后台自主运行、在重启时自动启动等。基本上,与 Apache 或 Postgresql 守护进程所做的相同。
我研究过在后台运行进程(通过 & 或 bg)、nohup 以及使用 screen 来维护多个上下文。我不确定这里的最佳做法是什么。
我希望能够轻松识别(友好名称)正在运行的每个 RingoJS 进程。(每个应用程序一个)。然后能够像使用 apachectl 或其他程序一样轻松启动和停止它们。我希望进程在重启时自动启动,并且不受重复 ssh 会话的影响。
Screen 似乎是一个不错的选择,但它的用例似乎更多是用于移植 shell 上下文,而不是维护长时间运行的系统进程。我可以在后台运行作业,但担心注销后会出现僵尸进程,或者出现无法明确识别正在运行哪个应用/服务的神秘 PID。
有人能提供一些指点,告诉我“应该”做什么才能达到这个结果吗?
谢谢。
答案1
您应该创建一个 init 服务。Ubuntu 使用 upstart。http://upstart.ubuntu.com/
答案2
对于没有内置方法作为守护进程运行的应用程序,您可能需要使用啟動-停止啟動程式在您创建的 init/upstart 脚本中执行命令来启动应用程序。您可以使用 start-stop-daemon 在后台启动某些程序,它可以将 pid 记录到文件系统,以便在需要时停止该进程。
只需查看 /etc/init.d/ 即可找到大量示例,特别是查看 /etc/init/skeleton 以获取模板。许多现有的启动脚本都使用 start-stop-daemon。包括 ssh、ntp、rsync 和许多其他脚本。