On a Debian server, I installed Node.js. I understand how to launch an app from putty with this command line:
node /srv/www/MyUserAccount/server/server.js
and get to it on the address 50.51.52.53:8080
(IP and port).
But as soon as I close putty, then I cannot reach the address 50.51.52.53:8080
anymore.
How to make a Node.js application run permanently?
As you can guess, I am a beginner with Linux and Node.js.
No need to install any other package.
Run this command
node server.js > stdout.txt 2> stderr.txt &
server.js is your server file or it can be api.js
After that hit "exit" to close terminal
exit
Forever is a very good NodeJs module to do exactly that.
Install forever
by typing in the command line
$ npm install forever -g
Then use the following command to run a node.js script
$ forever start /path/to/script.js
You are good to go. Additionally you can run
$ forever list
to see all the running scripts. You can terminate any specific script by typing
$ forever stop [pid]
where [pid]
is the process ID of the script you will obtain from the list
command. To stop all scripts, you may type
$ forever stopall
I'd recommend looking for something such as Forever to restart Node in the event of a crash, and handle daemonizing this for you.
Another way is creating a system unit for your app. create a "XXX.service" file in "/etc/systemd/system" folder, similar to this:
[Unit]
Description=swagger
After=network.target
[Service]
ExecStart=/usr/bin/http-server /home/swagger/swagger-editor &
WorkingDirectory=/home/swagger
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
A benefit is the app will run as a service, it automatically restarts if it crashed.
You can also use sytemctl to manage it:
systemctl start XXX
to start the service, systemctl stop XXX
to stop it and systemctl enable XXX
to automatically start the app when system boots.
I recommend use PM2, which is a process manager for Node.js applications. PM2 provides an easy way to manage and daemonize applications (run them as a service).
refer this link - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
During development, I recommend using nodemon. It will restart your server whenever a file changes. As others have pointed out, Forever is an option but in production, it all depends on the platform you are using. You will typically want to use the operating system's recommended way of keeping services up (e.g. http://www.freedesktop.org/wiki/Software/systemd/).
You could install forever using npm like this:
sudo npm install -g forever
And then start your application with:
forever server.js
Or as a service:
forever start server.js
Forever restarts your app when it crashes or stops for some reason. To restrict restarts to 5 you could use:
forever -m5 server.js
To list all running processes:
forever list
Note the integer in the brackets and use it as following to stop a process:
forever stop 0
Restarting a running process goes:
forever restart 0
If you're working on your application file, you can use the -w
parameter to restart automatically whenever your server.js
file changes:
forever -w server.js
You can use PM2, it's a production process manager for Node.js applications with a built-in load balancer.
Install PM2
$ npm install pm2 -g
Start an application
$ pm2 start app.js
If you using express then you can start your app like
pm2 start ./bin/www --name="app"
Listing all running processes:
$ pm2 list
It will list all process. You can then stop / restart your service by using ID or Name of the app with following command.
$ pm2 stop all
$ pm2 stop 0
$ pm2 restart all
To display logs
$ pm2 logs ['all'|app_name|app_id]
Here's an upstart solution I've been using for my personal projects:
Place it in /etc/init/node_app_daemon.conf
:
description "Node.js Daemon"
author "Adam Eberlin"
stop on shutdown
respawn
respawn limit 3 15
script
export APP_HOME="/srv/www/MyUserAccount/server"
cd $APP_HOME
exec sudo -u user /usr/bin/node server.js
end script
This will also handle respawning your application in the event that it crashes. It will give up attempts to respawn your application if it crashes 3 or more times in less than 15 seconds.
forever package worked for me, just one thing, it depends on deep-equal, so if you had issue with installing it like:
npm -g install forever
Try:
npm -g install forever [email protected]
instead.
If you just want to run your node app in the terminal always, just use screen.
Install on ubuntu/ debian:
sudo apt-get install screen
Usage:
$ screen
$ node /path/to/app.js
ctrl + a
and then ctrl + d
to dismiss
To get is back:
One screen: screen -r
If there's more than one you can list all the screens with: screen -ls
And then: screen -r pid_number
You could simply use this
nohup node /srv/www/MyUserAccount/server/server.js &
This will keep the application running and to shut it down you will have to kill it.
For that you could install htop
and then search for node and then kill it
Try pm2
to make your application run forever.
npm install -g pm2
and then use
pm2 start server.js
to list and stop apps, use commnds
pm2 list
pm2 stop 0
I hope this will help you.
At the command line, install forever:
npm install forever -g
Create an example file:
sudo nano server.js
You can edit the file and get results directly in your browser.
You can use filezilla or any editor to edit the file.
Run this command to run the file:
forever start --minUptime 1 --spinSleepTime 1000 -w server.js
I’ve found forever to do the job perfectly fine.
Assuming you already have npm installed, if not, just do
sudo apt-get install npm
Then install forever
npm install forever --global
Now you can run it like this
forever start app.js
First install pm2 globally
npm install -g pm2
then start
pm2 start bin/www
Installation
$ [sudo] npm install forever -g
You can use forever to run scripts continuously
forever start server.js
forever list
for stop service
forever stop server.js
Source: Stackoverflow.com