Start app as root with pm2

前端 未结 7 1618
遥遥无期
遥遥无期 2021-01-31 17:29

I have a daemon that must be run as root on startup.

I use pm2 to start other apps but can not figure out if it can start an app as root. Can it be done?

If not,

相关标签:
7条回答
  • 2021-01-31 17:58

    You should start pm2 as a root, (sudo pm2 start app.js), then your app will start as a root

    0 讨论(0)
  • 2021-01-31 17:59

    First, install pm2 globally. Then set root permissions to pm2 using this command

    sudo chown ubuntu:ubuntu /home/ubuntu/.pm2/rpc.sock /home/ubuntu/.pm2/pub.sock
    
    0 讨论(0)
  • 2021-01-31 18:06

    Wasted about an hour

    On AWS EC2 machine, one system was in inconsistent state due to earlier installations, that forced sudo elevations in the application for all commands to OS, like sh, etc.

    pm2 was running as root:

    ps aux | grep pm2
    # root ... PM2 v4.1.2: God Daemon (/root/.pm2)
    

    Now pm2 is running as ubuntu:

    ps aux | grep pm2
    # ubuntu  ...  PM2 v4.1.2: God Daemon (/home/ubuntu/.pm2)
    

    Below commands worked:

    sudo pm2 kill
    sudo npm remove pm2 -g
    
    sudo npm i -g pm2@latest
    sudo pm2 update
    sudo chown -R ubuntu:ubuntu /home/ubuntu/.pm2
    

    Hope that helps

    0 讨论(0)
  • 2021-01-31 18:12

    you might consider routing your traffic with iptables, since there is a reason behind this errror

    sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
    
    0 讨论(0)
  • 2021-01-31 18:17

    I had problems with sudo pm2 start api, but this was since pm2 was already running without sudo privileges, therefor you need to run:

    pm2 kill
    sudo pm2 start api
    

    This kills the pm2 deamon first, so that it starts in sudo, but then you need sudo for ALL pm2 commands afterwards, like: sudo pm2 ls

    0 讨论(0)
  • 2021-01-31 18:20

    If you only need your daemon to be run as root in order to access a port number (such as 80 or 443), the pm2 documentation recommends using authbind. So, if you want the user yourusername to have access to port 80, run:

    $ sudo apt-get install authbind
    $ sudo touch /etc/authbind/byport/80
    $ sudo chown yourusername /etc/authbind/byport/80
    $ sudo chmod 755 /etc/authbind/byport/80
    $ authbind --deep pm2 update
    

    And then use authbind --deep pm2 instead of pm2. The documentation suggests setting up an alias.

    0 讨论(0)
提交回复
热议问题