2016 answer: nearly every Linux distribution comes with systemd, which means forever, monit, PM2, etc. are no longer necessary - your OS already handles these tasks.
myapp.service file (replacing 'myapp' with your app's name, obviously):
[Unit] Description=My app [Service] ExecStart=/var/www/myapp/app.js Restart=always User=nobody # Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody' Group=nobody Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production WorkingDirectory=/var/www/myapp [Install] WantedBy=multi-user.target
Note if you're new to Unix:
/var/www/myapp/app.js should have
#!/usr/bin/env node on the very first line.
Copy your service file into the
Tell systemd about the new service with
Start it with
systemctl start myapp.
Enable it to run on boot with
systemctl enable myapp.
See logs with
journalctl -u myapp
This is taken from How we deploy node apps on Linux, 2018 edition, which also includes commands to generate an AWS/DigitalOcean/Azure CloudConfig to build Linux/node servers (including the
Use Forever. It runs Node.js programs in separate processes and restarts them if any dies.
forever start example.jsto start a process.
forever listto see list of all processes started by forever
forever stop example.jsto stop the process, or
forever stop 0to stop the process with index 0 (as shown by