-
Notifications
You must be signed in to change notification settings - Fork 97
Automatically start at boot PM2 & Systemd
Thanks to @rerouted How to get PM2 installed and running poolController on RPi or Linux
Environment File method
- Install PM2 with
npm install -g pm2
- Quit nodejs-poolController if its running.
- Put the script below in your home directory and call it
ecosystem.config.js
. If you do not need all three apps (REM, dashPanel, nodejs-poolController), simply delete the sections between/including the {} for the app that you do not want to start. pm2 start ecosystem.config.js
pm2 save
- Run
pm2 ls
to see your app(s) running with pm2. It will show uptime of the app and reset counter.pm2 monit
will bring up a UI for monitoring the same. - Type
pm2 startup
If you want pm2 to auto-start at boot (recommended). This command will give you a command based on your platform to run so pm2 starts on its own. Make sure you follow the directions and paste the given command back into your command line.pm2 unstartup
will reverse this behavior.- Optional, but highly recommended. Install logrotate to make sure that your logs don't consume all of your disk space.
The below scripts have been updated 5/2021 for some newer pm2 features and better startup/restart strategies.
- pm2 will only watch directories with source files (whitelist) instead of excluding directories with files that change
- restart delay is set at 10s
- watch_delay will restart the app within 5s of seeing source files changed
- the scripts will recompile the app each and every time it starts
module.exports = {
apps : [
{
"name": "REM",
"script": "npm",
"args": [
"start"
],
"cwd": "/home/pi/relayEquipmentManager",
"restart_delay": 10000,
"watch": [
"boards",
"config",
"connections",
"devices",
"gpio",
"i2c-bus",
"logger",
"pages",
"pinouts",
"spi-adc",
"web",
"package.json"
],
"watch_delay": 5000,
"kill_timeout": 15000
},
{
"name": "dashPanel",
"script": "npm",
"args": [
"start"
],
"cwd": "/home/pi/nodejs-poolController-dashPanel",
"restart_delay": 10000,
"watch": [
"pages",
"scripts",
"server",
"package.json"
],
"watch_delay": 5000,
"kill_timeout": 15000
},
{
"name": "njsPC",
"script": "npm",
"args": [
"start"
],
"cwd": "/home/pi/nodejs-poolController",
"restart_delay": 10000,
"watch": [
"config",
"controller",
"logger",
"web",
"package.json"
],
"watch_delay": 5000,
"kill_timeout": 15000
}
]
};
From @FlaMike - https://github.com/tagyoureit/nodejs-poolController/discussions/801#discussioncomment-7809175
Success at long last with pm2!!! For the benefit of others, this is what I had to do.
First, the path names in the ecosystem.config.js must match your home directory. If you've changed the name of your pi, you must update the ecosystem.config.js to match your home directory in all of the "cwd" lines. In my case, the home directory was "michael" for my login name. So in each of the three "cwd" lines, make sure your absolute directory names match your home directory. In my case, I replaced 'pi' with 'michael'. You must do this before starting pm2, lest you wind up with the mess I had. e.g., "cwd": "/home/michael/relayEquipmentManager",
I had not done the above--I used the mode file verbatim. Hence I had the pid errors noted above.
If you mess up like I did, do the following in each of the 3 program directories (nodejs-poolController, nodejs-poolController-dashPanel, and relayEquipmentManager):
remove the node-modules directory remove the package-lock.json file run npm install From your home directory: uninstall pm2 by doing the following: pm2 unstartup pm2 kill npm remove pm2 -g rm -rf ~/.pm2
You can then reinstall pm2, but make sure the ecosystem.config.js is correctly pointing to your home directory first!!!! And now you should be good to go forward.
pm2 logs
or pm2 monit
is useful for looking at the console logs of your app(s) for troubleshooting.
Submitted by @dkossman This systemd setup worked for me on Raspbian - can you add to the README? Seems like it might be helpful for others. This is based on a gitter post by @guru-florida, slightly adjusted for my configuration.
pi> sudu vi /etc/systemd/system/poolController.service # or your favorite editor
this file should contain the following. You may need to edit to adjust the user, working directory, or start command for your installation and OS:
[Unit]
Description=NodeJS Pool Controller
Documentation=https://github.com/tagyoureit/nodejs-poolController/
After=network.target
[Service]
Environment=NODE_ENV=production
Type=simple
User=pi
WorkingDirectory=/home/pi/nodejs-poolController
ExecStart=/usr/bin/node dist/app.js
Restart=on-failure
RestartSec=15s
[Install]
WantedBy=multi-user.target
Then run these commands:
pi> sudo systemctl daemon-reload
pi> sudo systemctl enable poolController
pi> sudo systemctl start poolController
To check the status of the service:
pi> systemctl status poolController
To tail the log:
pi> sudo -n journalctl -o cat -n 2500 -f -u poolController # tail the poolController log, -u option is based on service name
To stop, restart or disable the service, use the appropriate systemctl command:
pi> sudo systemctl stop poolController
pi> sudo systemctl restart poolController
pi> sudo systemctl disable poolController
Props to @antamy. Another approach to an etc/init.d
script. The script is runAtBoot.sh. See https://github.com/chovy/node-startup for instructions to use this script.