Debian/Ubuntu Startup Scripts
  • Debian uses a sys-v like init system for executing commands when the system run level changes - for example at startup and shutdown time.
  • If you wish to add a new service to start when the machine boots you should add the necessary script to the directory /etc/init.d/. Many of the scripts already present in that directory will give you an example of the kind of things that you can do.
  • Here's a very simple script which is divided into two parts, code which always runs, and code which runs when called with "start" or "stop".
#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0
  • Once you've saved your file into the correct location make sure that it's executable by running "chmod 755 /etc/init.d/blah".
  • Then you need to add the appropriate symbolic links to cause the script to be executed when the system goes down, or comes up.
  • The simplest way of doing this is to use the Debian-specific command update-rc.d:
root@skx:~# update-rc.d blah defaults
 Adding system startup for /etc/init.d/blah ...
   /etc/rc0.d/K20blah -> ../init.d/blah
   /etc/rc1.d/K20blah -> ../init.d/blah
   /etc/rc6.d/K20blah -> ../init.d/blah
   /etc/rc2.d/S20blah -> ../init.d/blah
   /etc/rc3.d/S20blah -> ../init.d/blah
   /etc/rc4.d/S20blah -> ../init.d/blah
   /etc/rc5.d/S20blah -> ../init.d/blah
  • If you wish to remove the script from the startup sequence in the future run:
root@skx:/etc/rc2.d# update-rc.d -f  blah remove
update-rc.d: /etc/init.d/blah exists during rc.d purge (continuing)
 Removing any system startup links for /etc/init.d/blah ...
   /etc/rc0.d/K20blah
   /etc/rc1.d/K20blah
   /etc/rc2.d/S20blah
   /etc/rc3.d/S20blah
   /etc/rc4.d/S20blah
   /etc/rc5.d/S20blah
   /etc/rc6.d/K20blah
  • This will leave the script itself in place, just remove the links which cause it to be executed.
  • You can find more details of this command by running "man update-rc.d".
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License