【问题标题】:Stop detached strongloop application停止分离的 strongloop 应用程序
【发布时间】:2016-05-06 01:47:28
【问题描述】:

我在我的服务器(ubuntu)上安装了环回,然后创建了一个应用程序并使用命令 slc run 运行......一切都按预期工作。 现在我有 1 个问题和我面临的 1 个问题:

问题:我需要使用 slc 运行命令,但在我关闭终端后也要让应用程序“活着”。为此,我使用了 --detach 选项并且它有效,我想知道 --detach 选项是否是最佳实践,或者我需要以不同的方式来做。

问题:在我使用 --detach 之后,我真的不知道如何阻止它。有没有可以用来停止进程运行的命令?

【问题讨论】:

    标签: loopbackjs strongloop


    【解决方案1】:

    要停止--detached 进程,请转到运行它的同一目录并执行slc runctl stoprunctl 命令有很多,但stop 可能是您最感兴趣的一个。

    最佳做法是一个更长的答案。简短的版本是:不要使用--detach ever,而是使用初始化脚本来运行你的应用程序并保持它运行(可能是 Upstart,因为你在 Ubuntu 上)。

    使用slc run

    如果您想将 slc run 作为 Upstart 作业运行,您可以使用 npm install -g strong-service-install 安装 strong-service-install。这将为您提供sl-svc-install,这是一个用于创建 Upstart 和 systemd 服务的实用程序。

    你最终会运行类似sudo sl-svc-install --name my-app --user youruser --cwd /path/to/app/root -- slc run . 的东西,它应该会创建一个名为my-app 的Upstart 作业,它将作为你的uid 从应用程序的根目录运行你的应用程序。您的应用程序的 stdout/stderr 将被发送到 /var/log/upstart/my-app.log。如果您使用的是早于 12.04 的 Ubuntu 版本,则需要指定 --upstart 0.6,您的日志最终将转入 syslog。

    使用slc pm

    另一个可能更简单的方法是使用slc pm,它的运行级别高于slc run,并且恰好更容易作为操作系统服务安装。对于这条路线,您已经安装了所有东西。运行 sudo slc pm-install 并安装 strong-pm Upstart 服务以及 strong-pm 用户以使用 /var/lib/strong-pm 的 $HOME 运行它。

    PM 方法稍微复杂一点的地方在于,您必须将应用部署到它。很可能这只是转到您的应用程序根目录并运行slc deploy http://localhost:8701/ 的问题,但具体情况将取决于您的应用程序。您可以为您的应用配置环境变量、部署新版本,您的日志将显示在 /var/log/upstart/strong-pm.log 中。

    一般最佳做法

    对于上述任一选项,我建议不要在您的服务器上执行npm install -g strongloop,因为它包括像 yeoman 生成器和其他在工作站上比在服务器上更有用的工具。 p>

    如果你想走slc run 路线,你会做npm install -g strong-supervisor strong-service-install 并用sl-run 替换你的slc run

    如果你想走slc pm 路线,你会做npm install -g strong-pm 并将slc pm-install 替换为sl-pm-install

    免责声明

    我在 StrongLoop 工作,主要研究这些工具。

    【讨论】:

    • 哇!非常感谢详细的回答。我会试一试,然后告诉你。顺便说一句,我真的很喜欢你们所做的,这是一个很棒的产品!
    • 对于那些运行 Loopback 的股票 AWS AMI 的人,我根据我的启动和运行经验创建了一个 gist。与此答案有一些不同之处,即我必须在 slc pm-install 命令上使用 --port 8701 而不是 --listen 8701。很好的答案。
    • @AngeloS 感谢您指出这一点。实际上比这更容易,因为端口 8701 是默认端口,所以你甚至不需要使用该选项 :-)
    【解决方案2】:

    使用以下方式查看正在运行的应用程序的状态:

    slc ctl status
    

    示例输出:

    Service ID: 1
    Service Name: app
    Environment variables:
      No environment variables defined
    Instances:
        Version  Agent version  Debugger version  Cluster size  Driver metadata
         5.2.1       2.0.3             n/a              1             N/A
    Processes:
           ID      PID  WID  Listening Ports  Tracking objects?  CPU profiling?  Tracing?  Debugging?
        1.1.2708  2708   0
        1.1.5836  5836   1     0.0.0.0:3001
    
    Service ID: 2
    Service Name: default
    Environment variables:
      No environment variables defined
    Instances:
        Version  Agent version  Debugger version  Cluster size  Driver metadata
         5.2.1       2.0.3             n/a              1             N/A
    Processes:
           ID      PID  WID  Listening Ports  Tracking objects?  CPU profiling?  Tracing?  Debugging?
        2.1.2760  2760   0
        2.1.1676  1676   1     0.0.0.0:3002
    

    要杀死第一个应用,请使用slc ctrl stop

    slc ctl stop app
    Service "app" hard stopped
    

    【讨论】:

      【解决方案3】:

      如果我必须将应用程序作为集群运行怎么办?我还能通过创建的暴发户来做到这一点吗? 喜欢 sudo sl-svc-install --name my-app --user youruser --cwd /path/to/app/root -- slc run --cluster 4 .

      我尝试这样做,但 /etc/init/my-app.conf 没有显示有关集群的任何信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-12
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多