Reputation: 12389
I use the awesome pm2 package to keep my node.js apps alive, but i have an issue I don't know how to fix.
One of my apps requires several scripts, a server and a few clients. Often when I restart my server, all the script are restarted, but connection isn't established because the clients have loaded before the server. Is it possible to make sure that a script starts after the other have loaded? Let me try to rephrase so it gets clearer
I have :
pm2 start server.js
pm2 start client.js
And I'd like to somehow start the client only when the server is started.
Apologies is my question seems unclear, please comment and I'll explain more!
Upvotes: 7
Views: 12811
Reputation: 16233
Check the pm2 restart strategies
You can have either the option restart-delay
You can also use the restart_delay to set a fixed timing between restarts
Or preferably you may use exp-backoff-restart-delay
Instead of restarting your application like crazy when exceptions happens (e.g. database is down), the exponential backoff restart will increase incrementaly the time between restarts, reducing the pressure on your DB or your external provider.
You can either use it command line
pm2 start app.js --exp-backoff-restart-delay=100
or in json format on file or via ecosystem.config.js file:
module.exports = [{
script: 'app.js',
exp_backoff_restart_delay: 100
}]
Upvotes: 1
Reputation: 19622
Run Pm2 using this script
pm2 start node <start script> --restart-delay <time in milliseconds>
Upvotes: 12
Reputation: 12265
Rewrite your client to make several connection attempts. It is always a good thing to do, and it'll also help in this case.
Upvotes: 6