我有一个freebsd服务器上的Web应用程序。 应用程序是一个单独的可执行文件,具有内置的networking服务器。 我的默认shell是zsh。
当我将它运行为“./my_website&”并closures连接时,它会终止。 然而,当我通过“/ usr / local / bin / bash” 切换到bash并以同样的方式运行我的网站时./my_website&“,然后退出bash并closures连接,我的网站一直在工作 – 正是我所需要的。
这里发生了什么 – 为什么在closures与我的服务器的连接之后它仍然在bash中运行?
以这种方式在后台运行应用程序是一种很好的做法吗? 如果没有,运行我的网站的正确方法是什么,以便在断开连接后不会终止?
或者你可以在屏幕上运行它:
screen -dm bash -c '/path/to/your/program'
正确的方法是把你的应用程序变成系统服务,并在/etc/rc.conf中添加yourapp_enable="YES"来自动启动它。 例如,请参阅BSD文章中的Practical rc.d脚本 。
你需要使用nohup命令
nohup ./my_website &
它会让你的进程在父进程死亡/退出之后运行而不pipeshell。
这取决于你的目标是什么。 如果您需要短时间运行此Web服务器(开发/testing),则可以使用screen / tmux并将其保留在打开的会话中。
如果你想在生产环境中运行这个应用程序,最好编写启动脚本。 如果这个应用程序不能将它们妖魔化,你可以使用守护进程(8) 。 我build议阅读BSD中的Practical rc.d脚本 ,也可以在ports树中find很多示例。 要使用守护进程查找rc脚本,可以使用以下命令find /usr/ports/ -depth 4 -name *.in | xargs fgrep -l /usr/sbin/daemon find /usr/ports/ -depth 4 -name *.in | xargs fgrep -l /usr/sbin/daemon