I want to be sure in what order services are started during boot process in Debian based systems (Debian Squeeze in particular).
This shows you what starts at which runlevel, and within each level the order is determined by the number after the letter (K is Kill, S is start).
You can configure what starts at each runlevel with sysv-rc-conf, which is installable with apt.
e.g. on my system apache2 is symlinked in rc5.d as "S20apache2". A link in the same directory with S19 would start before it, something with S21 would start after it.
You can list all services and their status with this simple command:
From the manual:
service --status-all runs all init scripts, in alphabetical order, with the status command. The status is [ + ] for running services, [ - ] for stopped services and [ ? ] for services without a 'status' command. This option only calls status for sysvinit jobs; upstart jobs can be queried in a similar manner with initctl list.
for i in `find /etc/rc*.d -name S*`; do basename $i | sed -r 's/^S[0-9]+//'; done | sort | uniq Sample output: acpid anacron avahi-daemon boa bootlogd bootlogs bootmisc.sh checkfs.sh checkroot-bootclean.sh checkroot.sh cryptdisks cryptdisks-early dbus delayed-services hostname.sh hwclock.sh keyboard-setup killprocs kmod lightdm mountall-bootclean.sh mountall.sh mountdevsubfs.sh mountkernfs.sh mountnfs-bootclean.sh mountnfs.sh mtab.sh pppd-dns procps qemu-kvm rc.local rmnologin rsyslog single sleep stop-bootlogd stop-bootlogd-single udev udev-mtab x11-common
On distros using systemd, you can control the order you have to use a combination of Requires with Before/After. Due to the parallel and relationships among services, the service start-up order isn't deterministic.
# This command prints an SVG graphic detailing which system services have been started at what time, highlighting the time they spent on initialization. systemd-analyze plot > startup_order.svg
# to generate a graphical dependency tree. systemd-analyze dot | dot -Tsvg > systemd.svg