I am trying to run an Express API server with sudo permissions and have it automatically start on boot.

The API needs access to bcm2835 library, and I get the following when trying to run node server.js

bcm2835_init: Unable to open /dev/mem: Permission denied /home/pi/Documents/node_modules/rpio/lib/rpio.js:104 return bindfunc(optarg);

Error: Could not initialize bcm2835 library
at bindcall (/home/pi/...) etc.

However it boots up fine running sudo node server.js.

I have created a service file at /etc/systemd/system as follows:

Description=Node API

ExecStart=/usr/bin/node /home/pi/Documents/server.js



I found some guidance here and here, but they seem slightly off, since a sub-command needs sudo/root privileges.

How can I run this service with proper permissions so it boots up with the Pi?

I think the boot is failing silently in the background.

  • You probably need some environment variables for node to run and find the library.
    – RalfFriedl
    Nov 1 '18 at 14:18
  • Do you have an example? I'm not very familiar with environment variables, and I don't understand how a variable could be equivalent to running as sudo.
    – Matthew
    Nov 1 '18 at 14:21
  • It's not related tosudo. Type env and see what might be used by node.
    – RalfFriedl
    Nov 1 '18 at 15:00
  • Type env where?
    – Matthew
    Nov 1 '18 at 15:56
  • 1
    At a shell prompt.
    – RalfFriedl
    Nov 1 '18 at 15:57

/dev/mem must be run as root, so after a fresh install of Raspbian.

  1. Create the service

  2. Enable the service with systemctl enable nameOfService

  • 1
    It's enable instead of enbale.. :)
    – Pascal
    Jun 1 '20 at 17:57
  • Good catch. Thank you!!
    – Matthew
    Jun 2 '20 at 18:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.