【问题标题】:pm2 Startup not starting up on Ubuntupm2 启动未在 Ubuntu 上启动
【发布时间】:2016-04-21 15:17:09
【问题描述】:

在服务器重新启动时,我很难让 pm2 重新启动(它本身和两个节点/express 文件,app.jsapp2.js)。

以下是我尝试过的流程:

pm2 startup
pm2 start app.js
pm2 start app2.js
pm2 startup ubuntu (also tried systemd and with/without -u username)
pm2 save

我以所有可能的组合运行了上述命令,但没有任何效果。我尝试以 root 身份运行,但它也不起作用。

我的~/.pm2/dump.pm2 文件包含信息,所以我不知道该去哪里找。

我曾尝试根据this issue 修改我的/etc/init.d/pm2-init.sh 文件,但没有帮助。

我的设置:
数字海洋服务器
Ubuntu 15.10
节点 v5.4.1
PM2 v 1.0.0

我尝试过的其他参考..
http://pm2.keymetrics.io/docs/usage/startup/
https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps
https://gist.github.com/leommoore/5998406
https://www.terlici.com/2015/06/20/running-node-forever.html
https://serversforhackers.com/node-process-management-with-pm2 http://nodered.org/docs/getting-started/running.html#starting-node-red-on-boot
https://github.com/Unitech/pm2/issues/1316

到目前为止,每次我重新启动服务器时,pm2 都无法自动启动(除非我需要等待几分钟?- nginx 会立即重新启动)。

有人可以帮我解决这个问题吗?命令的运行顺序是什么?我需要修改任何其他文件吗?

【问题讨论】:

    标签: ubuntu pm2


    【解决方案1】:

    您是否尝试过在 Ubuntu (cat /var/log/boot.log) 上检查您的启动日志?

    您可能会看到如下错误:

    Error: EACCES, permission denied '/home/<USER>/.pm2'

    我自己无法解决这个问题,但至少这应该为您指明正确的方向。

    【讨论】:

    【解决方案2】:

    我想我solved the problem

    我玩过 pm2,发现了 CentOS 7 的两种工作方式(在你的 项目文件夹 index.js - 主文件):

    • 1

      sudo pm2 开始 index.js sudo pm2 保存 sudo pm2 启动 centos
    • 2

      pm2 启动 index.js pm2 保存 pm2启动centos '#并在sudo下运行之前代码中生成的脚本

    【讨论】:

    • 我必须试一试!
    【解决方案3】:

    您必须使用

    保存您的节点应用程序
     pm2 start [app_name]
     pm2 save
    

    然后做:

     pm2 startup [operation system]
    

    这将创建一个 dump.pm2 文件,pm2 需要在重新启动时运行您的应用程序。

    操作系统:

    • systemd:Ubuntu >= 16,CentOS >= 7,Arch,Debian >= 7
    • 新贵:Ubuntu
    • 发布:达尔文、MacOSx
    • openrc:Gentoo Linux、Arch Linux
    • rcd:FreeBSD
    • systemv:Centos 6、Amazon Linux

    【讨论】:

    • 这在 Ubuntu 14.04.5 LTS 上对我有用。我最初在pm2 startup ubuntu 处的读数告诉我使用pm2 startup upstart。做到了,现在我的应用程序在重启时启动。
    • 我使用的是 Ubuntu Xenial 16.04。对我有用的是:pm2 save...pm2 startup upstart。是的!
    • @pwbred 它取决于 ubuntu 使用的进程管理,这取决于 ubuntu 版本。您可以在此处查看案例详情:pm2.keymetrics.io/docs/usage/startup
    【解决方案4】:

    我的解决方案是使用 systemctl 重新启动 pm2:systemctl reload-or-restart pm2-root

    当我第一次设置我的 Ubuntu 18.04 服务器时,我运行 pm2 start app.js 来启动我的应用程序。然后当我尝试运行pm2 startup + pm2 save 以在启动时重新启动应用程序时,这似乎不起作用,因为运行systemctl list-units,pm2 没有出现在服务列表中。即使应用程序正在运行(pm2 list 证实了这一点)。所以我跑了systemctl list-units -all,pm2 显示为“inactive”和“dead”。

    所以我做到了:

    • systemctl status pm2-root(只是为了确认它是“inactive”/“dead”)

    • systemctl reload-or-restart pm2-root(通过systemctl重启pm2)

    • systemctl status pm2-root(确认 pm2 现在处于“活动”/“运行”状态)

    • 然后我也跑了systemctl enable pm2-root,让PM2在启动时运行(不确定是否有必要)

    • 又是pm2 startup + pm2 save(用于开机启动)

    OBS.:我在命令中使用了 pm2-root,因为我使用 root 用户运行 pm2,但如果需要,您应该替换为您的用户 (pm2-<USER>)。

    【讨论】:

    • 同样的问题。谢谢
    【解决方案5】:

    在 Ubuntu 中得到以下代码:

    pm2 start main.js
    pm2 save
    pm2 startup ubuntu
    

    请注意,“pm2 save”会在 /root/.pm2/dump.pm2 中创建一个 dump.pm2 文件,当您的机器重新启动时会使用该文件。

    如果您不知道您的操作系统名称,请使用:

    pm2 startup
    

    PM2 会自动检测您的操作系统。

    【讨论】:

      【解决方案6】:

      解决方案是:‎

      1. 移至安装 PM2 的文件夹(例如 /home/ubuntu)。 会有一个文件夹'.pm2 ‎。

      2. 运行“PM2 启动”以生成一个 活动启动脚本。

      3. 运行“PM2 save”以冻结进程列表 自动重生。'。

      现在所有进程都将在 roboot 时自动启动。

      【讨论】:

        猜你喜欢
        • 2015-12-22
        • 2016-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 1970-01-01
        • 2018-04-30
        • 2015-02-06
        相关资源
        最近更新 更多