====== Ubuntu - Services - System and service managers ====== Linux provides many System and service managers. A good init system should start only what is needed, and that on-demand. Either lazily or in parallel and in advance. However it should not start more than necessary, particularly not everything installed that could use that service. ---- ===== init ===== System V style init script **/etc/init.d/name**. **Disadvantages of init** * The traditional System V init system had limitations. For example, some services need to start after other services (for example, you can't mount NFS filesystems until the network is running), but the only way in System V to handle that is to set the links in the rc#.d directory such that one is before the other. You might need to re-number everything later when dependencies are added or changed. * Could not start services in parallel. ---- ===== invoke-rc.d ===== **invoke-rc.d** is a wrapper around running the System V style init script **/etc/init.d/name** directly, obeying runlevel constraints as well as any local policies set by the system administrator. The policy may cause the command not to be run at all, based on the current runlevel and whether the daemon should be run in that runlevel. By default, Debian does not differentiate between runlevels 2-5, but as the local administrator, you can change what is run in each runlevel. invoke-rc.d will honor these local policies and not start a daemon if the runlevel is wrong. According to the man page, all access to init scripts by Debian packages' maintainer scripts should be done through invoke-rc.d. * https://people.debian.org/~hmh/invokerc.d-policyrc.d-specification.txt * http://manpages.ubuntu.com/manpages/xenial/man8/invoke-rc.d.8.html ---- ===== service ===== **service** runs a System V init script in as predictable an environment as possible, removing most environment variables and with current working directory set to /. **service** works in most Linux distributions including Debian and Ubuntu. ---- ===== systemd ===== systemd is the new system and service manager for Linux. It is a replacement for init system and can manage system startup and services. It starts up and supervises the entire system. **systemctl** only works on **systemd** based Ubuntu like version 16.04 LTS and above. **Advantages of systemd** * Every process started gets its own cgroup or a particular cgroup. This makes it more efficient to identify malicious users/processes. * Pre-creation of sockets and file handles for services, similar to how xinetd does for it's services, allowing dependent services to start faster. For example, systemd will hold open the filehandle for /dev/log for syslog, and subsequent services that send to /dev/log will have their messages buffered until syslogd is ready to take over. * Fewer processes run to actually start a service. This means you aren't writing a shell script to start up your service. This can be a speed improvement, and (IMO) something easier to set up in the first place. * systemd jobs start when they have to. **Disadvantages of systemd** * All startup scripts need to be rewritten. * There's way less compatibility with non-linux OSs (like BSDs, for example). **References** * http://en.wikipedia.org/wiki/Systemd * https://wiki.ubuntu.com/SystemdForUpstartUsers ---- ===== System V ===== See init. ---- ===== Upstart ===== Upstart jobs start as soon as they can.