0

I'm trying to a run a .sh file on startup of a rPi3B+ running openSuse Tumbleweed JeOS. The script is really simple and looks like this:

node /home/user_name/path/to/the/file.js

here are two links I tried to follow:

https://forums.opensuse.org/showthread.php/428743-How-to-run-script-at-startup https://www.suse.com/c/easy-running-scripts-boot-and-shutdown/ https://doc.opensuse.org/documentation/leap/startup/html/book.opensuse.startup/cha.adm.shell.html

How how to go about this?

Edit: I also just tried following along to this one without any luck either: https://stackoverflow.com/questions/12973777/how-to-run-a-shell-script-at-startup#12973826

My startServer script in /etc/init.d looks like this:

#!/bin/sh
# ScriptName=startServer
node /home/user-name/server.js &

2 Answers 2

0

/etc/init.d/after.local

create this file and from within call your script.sh it will execute as root.

Otherwise you can call it via su -c '/path/yourscript.sh' username where username is whatever valid user account.

After the system is fully booted if /etc/init.d/after.local exists then whatever is in it will be run. You can chmod 600 /etc/init.d/after.local and chown root.root /etc/init.d/after.local if you are concerned about security.

your StartServer script in /etc/init.d looks like this:

/etc/init.d/StartServer.sh

it contains

#!/bin/sh
# ScriptName=startServer
node /home/user-name/server.js &

create /etc/init.d/after.local and its contents is simply

/etc/init.d/StartServer.sh
  1. after system is fully booted, the last step [this is a suse thing] it will try to execute the file /etc/init.d/after.local if it exists
  2. you manually create /etc/init.d/after.local and put /etc/init.d/StartServer.sh in it
  3. your StartServer.sh script gets run after the system is fully booted.
3
  • Can you clarify what you mean by call from within? Do you mean to include a line in the after.local file for each .sh file? Do these .sh files need to be contained in the init.d folder? Could you perhaps give an example of what this "call looks like"? Thank you!
    – AustinFoss
    Feb 13, 2019 at 22:49
  • added clarification to above
    – ron
    Feb 14, 2019 at 15:50
  • realize you can call anything from /etc/init.d/after.local it does not need to be a .sh script.
    – ron
    Feb 14, 2019 at 15:52
0

openSUSE, both Leap and Tumbleweed, have switched to systemd long time ago. There should be nothing under /etc/init.d.

All services should come with systemd startup templates *.service located under /usr/lib/systemd/system (if not, you can easily create your own *myserver*.service under /etc/systemd/system).

In the respective .service file, add a line

ExecStartPost=/usr/bin/sh -c "node /home/user-name/server.js &"

after the ExecStart= line that starts the service. Also consider stopping your server.js through a corresponding ExecStopPre= entry.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .