【问题标题】:pm2 startup doesn't workpm2 启动不工作
【发布时间】:2015-12-26 15:39:54
【问题描述】:

我成功设置了我的 nodejs 服务器并在 Ubuntu 15.04 服务器上使用它,我的问题是我希望我的节点应用程序在服务器重新启动时继续运行,所以我尝试了 pm2forevercrontab但它们都不适合我,重启后我需要手动启动节点应用程序。

我试过pm2如下:

pm2 startup ubuntu
pm2 start appname
pm2 save

pm2-init.sh 文件:

#!/bin/bash                                                     
# chkconfig: 2345 98 02                                         
#                                                               
# description: PM2 next gen process manager for Node.js         
# processname: pm2                                              
#                                                               
### BEGIN INIT INFO                                             
# Provides:          pm2                                        
# Required-Start: $local_fs $remote_fs                          
# Required-Stop: $local_fs $remote_fs                           
# Should-Start: $network                                        
# Should-Stop: $network                                         
# Default-Start:        2 3 4 5                                 
# Default-Stop:         0 1 6                                   
# Short-Description: PM2 init script                            
# Description: PM2 is the next gen process manager for Node.js  
### END INIT INFO                                               

NAME=pm2                                                                                            
PM2=/home/bashar/.nvm/versions/node/v4.1.1/lib/node_modules/pm2/bin/pm2                             
USER=bashar                                                                                         

export PATH=/home/bashar/.nvm/versions/node/v4.1.1/bin:$PATH                                        
export PM2_HOME="/home/bashar/.pm2"                                                                 

get_user_shell() {                                                                                  
    local shell=$(getent passwd ${1:-`whoami`} | cut -d: -f7 | sed -e 's/[[:space:]]*$//')          

    if [[ $shell == *"/sbin/nologin" ]] || [[ $shell == "/bin/false" ]] || [[ -z "$shell" ]];       
    then                                                                                            
      shell="/bin/bash"                                                                             
    fi                                                                                              

    echo "$shell"                                                                                   
}                                                                                                   

super() {                                                                                           
    local shell=$(get_user_shell $USER)                                                             
    su - $USER -s $shell -c "PATH=$PATH; PM2_HOME=$PM2_HOME $*"                                     
}                                                                                                   

start() {                                                                                           
    echo "Starting $NAME"                                                                           
    export PM2_HOME                                                                                 
    super $PM2 resurrect                                                                            
}


stop() {                      
    super $PM2 dump           
    super $PM2 delete all     
    super $PM2 kill           
}                             

restart() {                   
    echo "Restarting $NAME"   
    stop                      
    start                     
}                             

reload() {                    
    echo "Reloading $NAME"    
    super $PM2 reload all     
}                             

status() {                    
    echo "Status for $NAME:"  
    super $PM2 list           
    RETVAL=$?                 
}                             

case "$1" in                  
    start)                    
        start                 
        ;;                    
    stop)                     
        stop                  
        ;;                    
    status)                   
        status                
        ;;                    
    restart)                  
        restart               
        ;;                    
    reload)                                                        
        reload                                                         
        ;;                                                             
    force-reload)                                                      
        reload                                                         
        ;;                                                             
    *)                                                                 
        echo "Usage: {start|stop|status|restart|reload|force-reload}"  
        exit 1                                                         
        ;;                                                             
esac                                                                   
exit $RETVAL                                                                                                                  

这不起作用,所以我尝试使用crontab,如下所示: 首先,我创建一个脚本并将其命名为starter.sh

#!/bin/bash
pm2 start /home/bashar/www/node/server.js

然后打开crontab编辑器:

crontab -e
@reboot /home/bashar/www/node/server.js

上述方法也没有在服务器重启时启动我的应用程序。

请指教,

【问题讨论】:

  • 我已经设法让我的系统正常启动 - stackoverflow.com/questions/32769302/… - 虽然我不确定 ubuntu 15.04 是否完全一样
  • 不,这对我不起作用,除了开始 pm2 工作的建议步骤之外,您没有做任何事情。 pm2 的版本已经 0.15.7

标签: node.js ubuntu pm2


【解决方案1】:

pm2 在重启期间似乎有一个错误。将 pm2 添加到 /etc/init.d 中的自动启动进程后,该脚本在正常处理下工作正常,但在重新启动时会做一些奇怪的事情:它将 pm2.dump 文件清空。有几个错误报告like this one,但到目前为止它仍然是一个错误......

我发现的最简单的解决方法如下:

  1. 编辑 /etc/init.d/pm2-init.sh,并在 stop() 部分注释掉“super $PM2 dump”行
  2. 每当您修改 pm2 进程列表时,请记住手动执行“pm2 转储”

如果有人有更永久的解决方案,请告诉我... :)

【讨论】:

  • 试一试,似乎无法正常工作:(
  • 您找到并注释掉转储 pm2 配置的行了吗?这可能是 Ubuntu 特有的......
  • 我们如何手动执行“pm2 dump”。其次,即使在重新启动后评论 super $PM2 dump 后问题仍然存在!顺便说一句,我使用 ubunutu 14.04 lts
  • 它对我很有用,现在问题是重启后驱动器没有挂载
  • @RizwanPatel 在对进程列表进行更改后,我在命令行中输入了“pm2 dump”。不确定我是否可以帮助您使用非安装驱动器,希望与 pm2 无关。祝你好运!
【解决方案2】:

对于任何在这里寻找 Windows 机器的人(就像我一样),pm2 启动仅适用于 unix 系统。

https://pm2.keymetrics.io/docs/usage/startup/#init-systems-supported

试试这个:https://www.npmjs.com/package/pm2-windows-startup

【讨论】:

    猜你喜欢
    • 2018-05-04
    • 1970-01-01
    • 2016-06-05
    • 2015-12-23
    • 2022-07-18
    • 2017-12-04
    • 2019-07-18
    • 2014-04-23
    • 2016-04-21
    相关资源
    最近更新 更多