How to configure Systemd service unit to start Node app with "npm start" instead of "app.js"

9,057

I'm running a similar setup on Debian, and my service looks like this:

...

[Service]
Environment=NODE_PORT=3000
Type=simple
User=www-data
Restart=on-failure
WorkingDirectory=/var/www/<your-code-directory>
ExecStart=npm start

...

Hope this helps!

Share:
9,057
myNewAccount
Author by

myNewAccount

Updated on September 18, 2022

Comments

  • myNewAccount
    myNewAccount over 1 year

    Environment: CentOS 8, Node.js, Digital Ocean Droplet

    My Systemd setup starts a node app with the following command. It works as expected.

    $ sudo systemctl start myapp
    

    File 1: /etc/systemd/system/myapp.service

    [Unit]
    Description = My App 
    After = network.target
    
    [Service]
    ExecStart = /root/start-myapp.sh
    Restart=on-failure
    
    [Install]
    WantedBy = multi-user.target
    

    File 2: /root/start-myapp.sh

    #!/bin/sh
    /usr/bin/node /srv/myapp/app.js
    

    However when I'm not using Systemd I normally start my app with Node Package Manager using the command, npm start. I'd rather have the Systemd unit also start the app with npm start.

    Unfortunately it threw an error when I changed app.js to npm start in /root/start-myapp.sh,

    /usr/bin/node /srv/myapp/npm start
    

    I made another attempt by switching the path from node to npm but it produced the same error.

    /usr/bin/npm /srv/myapp/npm start
    

    Question: How do I get my Systemd unit file to start my app with the command npm start?