我在 freebsd 服务器上有一个 Web 应用程序。应用程序是一个单独的可执行文件,带有内置 Web 服务器。我的默认 shell 是 zsh。
当我以“./my_website &”的形式运行它并关闭连接时,它就会终止。但是,当我切换到 b通过“/usr/local/bin/bash”并以相同的方式运行我的网站“./my_website &”,然后退出bash并关闭连接,我的网站继续工作 - 这正是我需要的。
这里发生了什么 - 为什么我关闭与服务器的连接后它仍继续在 bash 中运行?
以这种方式在后台运行应用程序是一种好习惯吗?如果不是,那么运行我的网站的正确方法是什么,以便在我断开连接后它不会终止?
答案1
或者您可以在屏幕上运行它:
screen -dm bash -c '/path/to/your/program'
答案2
正确的方法是将您的应用程序变成系统服务并添加yourapp_enable="YES"
到 /etc/rc.conf 中以自动重新启动它。请参阅BSD 中的实用 rc.d 脚本文章为例。
答案3
您需要使用nohup
命令
nohup ./my_website &
无论 shell 如何,它都会让您的进程在父进程死亡/退出后运行。
答案4
这取决于您的目标。如果您需要短时间运行此 Web 服务器(开发/测试),则可以使用 screen/tmux 并将其保持在打开的会话中。
如果您想在生产环境中运行此应用程序,最好编写启动脚本。如果此应用程序无法自我妖魔化,您可以使用守护进程(8).我建议阅读BSD 中的实用 rc.d 脚本,您还可以在 ports 树中找到很多示例。要查找带有守护进程的 rc 脚本,您可以使用命令find /usr/ports/ -depth 4 -name *.in | xargs fgrep -l /usr/sbin/daemon