the title pretty much sums it up.
how do I add a startup.sh and shutdown.sh of my server app to the startup and shutdown sequence of the Debian OS?
Server Fault is a question and answer site for system and network administrators. It only takes a minute to sign up.Sign up to join this community
On Debian, service & application boot and shutdown scripts should be placed into
Debian provides an example script
/etc/init.d/skeleton that you can modify to your taste for your particular application.
Once it's in place, call:
# update-rc.d YOURAPP defaults
To have Debian add the
/etc/rc?.d/ symlinks for you.
If you prefer a menu or graphical interface, take a look at the
Since Debian Jessie, the old
init program has been replace by
Check it out yourself. Run:
ls -l /sbin/init and see what it's pointing to. These days it points to
/sbin/init -> /lib/systemd/systemd), a newer and better initialization program.
SO THE CHOSEN AND OTHER ANSWERS HERE ARE NOW OUTDATED
*While you can still install scripts the old way with System-V tools, it's not a good idea generally speaking.
man systemd.service says:*
If a service is requested under a certain name but no unit configuration file is found, systemd looks for a SysV init script by the same name ... and dynamically creates a service unit from that script. This is useful for compatibility with SysV. Note that this compatibility is quite comprehensive but not 100%.
It's easier than you think. (-:
Here's the new and preferred method to install boot-up or shutdown programs.
systemd you first want to create a unit file. A unit file is mostly declarations, not code.
Then you'll use the
systemctl command to enable or start that unit.
systemd does much of the work for you, making it easy, for example, to have a critical program automatically re-start if it crashes or is otherwise killed. Also it shuts down your program where and when it should by default with no extra work on your part.
Start to learn about
Man pages to start with:
man systemd.unit -- About unit files in general
man systemd.service -- About service unit files, e.g. daemons, and single run programs.
man systemctl -- Command line user interface
man journalctl -- View log of what systemd has done
man systemd -- About the init program itself
There are also a variety of other types of unit files, e.g.
man systemd.target - for groups and common synced targets.
Once you've digested the basics above, then dig in with
man -k systemd to find other related man pages.
Whatever you do, on Debian do not use any of these:
update-rc.d--install and remove System-V style init script links
sysv-rc-conf-- Run-level configuration for SysV like init script links
runlevel-- Print previous and current SysV runlevel
BUM-- Boot Up Manager - a graphical runlevel editor
systemadm-- Graphical frontend for the systemd system and service manager
This unit file starts up the NoIP.com daemon when I boot-up, and shuts it down when I shutdown.
This daemon, from time to time, sends my current IP address to update my DDNS (Dynamic DNS (Domain Name Server)) provider's data base, thus keeping my domain name pointing at my computer wherever it travels to.
This unit files is located on my system in this settings file:
Here's what's in the unit file:
# Comments can only go at the beginning of the line! [Unit] Description=Start the NoIP IP update daemon. This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net. Documentation=https://no-ip.com/ Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST [Service] # 'forking' because process returns after starting daemon (traditional unix daemon). Type=forking # This program runs and returns, leaving the running daemon ExecStart=/usr/local/bin/noip2 # Be in no hurry to start this. Max nice is +19. Nice=15 # If it dies for any reason, then restart it Restart=always [Install] # Installs a hook to use this unit file when the system boots or shuts down WantedBy=multi-user.target
Manually run a unit file, (e.g. for testing):
$ sudo systemctl start noip2.
$ sudo systemctl restart noip2.
$ sudo systemctl stop noip2.
Configure system to automatically run a unit file when starting up or shutting down:
$ sudo systemctl enable noip2.
$ sudo systemctl disable noip2.
$ sudo journalctl -u noip2
You can call your script from /etc/rc.local, prior to the line that says exit 0
As for shutting down your app, I would suggest putting a script in /etc/rc0.d. You need to name it with an uppercase K, and then a 2 digit number which specifies the order these scripts are run, and then a name. It will be called with a parameter "stop", but you can ignore this for a simple stop script.
For startup have a look at this.
For shutdown, create a link / copy your script into one of the /etc/rcX.d folders where X is the runlevel that you want it to execute at. 0 is the shutdown runlevel for Debian I believe.
The easiest is to modify existing scripts, works in my system, used for sounds :)
/etc/init.d/rc.local, add your sh at the end of the file, before : (it will execute it right before login "screen")
/etc/init.d/halt, add your sh at the beginning of the file, just after initial comments (it will be executed before actual shutdown command, that is called by this script file