Erlang 如何通过Mongooseim中的终端与已经运行的实例交互?
我在ubuntu服务器上使用源代码中的Mongooseim 3.2.0。以下是令人关注的问题:Erlang 如何通过Mongooseim中的终端与已经运行的实例交互?,erlang,ejabberd,mongoose-im,Erlang,Ejabberd,Mongoose Im,我在ubuntu服务器上使用源代码中的Mongooseim 3.2.0。以下是令人关注的问题: 将mongooseim作为服务运行的最佳方式是什么,以便在mongooseim崩溃或系统重新启动时自动重新启动 如何通过终端与ubuntu服务器上已经运行的mongooseim实例进行交互,如“mongooseimctl live”。我猜运行“mongooseimctl live”将尝试创建另一个实例。我只想看到实时日志和交互,不想为了这个目的一直滚动长日志文件 如果上面的答案显而易见,但我只是想遵循
如果上面的答案显而易见,但我只是想遵循最佳指导,我很抱歉。
mongooseimctl-live
或mongooseimctl-foreground
对于开发或冒烟测试部署非常有用(除非您在容器中运行)。对于真实世界的用例,您应该使用mongooseimctl start
在后台启动服务器
回到容器-容器化应用程序的最佳方法是在前台运行它们,因此在容器启动脚本中使用mongooseimctl前台
服务器运行后(无论如何启动),可以使用
mongooseimctl debug
附加shell以解决问题。这是获取协议“inet\u tcp”时使用的命令:名称mongooseim@localhost另一个Erlang节点似乎正在使用中
错误。如果是生产环境,请小心-通过访问此shell,您可以轻松地关闭服务器
如果您只想查看日志,而对shell提供的服务器内部没有交互访问,那么一个简单的tail-f/您配置的mongooseim log dir/*
就足够了
Ubuntu现在使用systemd来管理其服务的生命周期。systemd
.service
文件可以在以下位置找到-我们使用它打包到Debian/Ubuntu.deb包中。当我尝试在已经运行的mongooseim实例(在同一系统的Separte终端中)中使用“mongooseimctl live”或“mongooseimctl前台”时,我得到以下错误:协议“inet\u tcp”:名称mongooseim@localhost似乎正在被另一个Erlang nodeBTW使用,您可能不应该使用mongooseim@localhost
用于生产部署。相反,请为您的服务找到域名,获取DNS,并将服务器配置为mongooseim@your.domain.net
“协议”inet\u tcp”:名称mongooseim@localhost似乎正在被另一个Erlang节点使用”,虽然有点模糊,但这一切都说明了这一点。服务器已经在后台运行了-它不能第二次并行启动。这对我来说很有意义。谢谢erszscz,像往常一样:)我将在ubuntu的bashrc文件中添加“mongooseimctl start”,这样,如果我的服务器因任何原因重启,它将自动启动,因为我目前正在进行开发,所以我将使用“mongooseimctl debug”与日志交互。将“mongooseimctl start”添加到.bashrc或.bash_配置文件不是部署生产服务器的方法-例如,如果崩溃,它不会自动重新启动。这就是操作系统的init/service/daemon基础结构的用途。Ubuntu过去使用Upstart进行服务管理,但AFAIK已经像大多数其他发行版一样改用Systemd。寻找关于创建一个新systemd服务的资料——也许这个会很有用:实际上,我们构建了MongooseIM的Debian包,所以我们有一个脚本将其作为systemd服务启动。我将相应地编辑原始答案。这是systemd.service文件:好的。我会在部署前考虑它们。