init
Folders and files
Name | Name | Last commit date | ||
---|---|---|---|---|
parent directory.. | ||||
Upstart configuration for Chromium OS ===================================== This document attempts to address the most common questions when adding an Upstart configuration file to Chromium OS. Where should your .conf file go? -------------------------------- Ideally not in this directory. It is far better if your Upstart configuration file accompany your source, either along with the source code under src/platform or src/third_party if appropriate, or in the files/ directory alongside your ebuild in src/third_party/chromiumos-overlay. What should the 'start on'/'stop on' lines be? ---------------------------------------------- The majority of services will use: start on starting system-services stop on stopping system-services "System Services" can expect the standard virtual filesystems to be mounted, the stateful partition to be writable and services such as udev and D-Bus to be running. A special case is if your service should also be run in the case of the UI failing to come up, this is particularly important for services that would aid debugging (such as the SSH server on test images). These services may assume the same dependencies and may instead use: start on starting failsafe stop on stopping failsafe In both cases your service will not be started until the login prompt is visible, so doesn't hold up the boot. Some services might need to hold up the boot; you should think carefully about this, even if you only add 100ms to the boot time, if ten people do that we slip from 8s to 9s. These services can still depend on the standard virtual filesystems to be mounted, the stateful partition to be writable but can only depend on udev to be running - no other service. They may use: start on starting boot-services stop on stopping boot-services The UI itself is one of these services. On the other end of the spectrum, you might have something to run after the boot; for example because it examines log files and soforth. This can be run with: start on started system-services Note the use of 'started' rather than 'starting', that's important! Should I put 'task' in my configuration? ---------------------------------------- Probably not. To illustrate what 'task' does, here is an example configuration file: start on starting boot-services script : end script Note that this has no 'stop on' line, this script finishes by itself and should not be interrupted; and only has a single 'script' block without any pre-start, post-stop, etc. If your configuration file does not look like this, you should not use 'task'. When the boot-services milestone is reached, your script will begin running alongside all other boot-services starting up. Your script might take longer than that, and the system-services may begin starting too. If this is not what you want, because your script does something that all system services are likely to depend on, then 'task' may be appropriate. But it may be better to have the other jobs depend on your script finishing with 'and stopped your-script-name'. Finally you should be aware that 'task' only affects the 'starting' event; if your script is 'start on started system-services' then 'task' has no effect so should not be used. Which of 'script', 'pre-start', 'exec', etc. should I use? ---------------------------------------------------------- The most common case is that you are defining a service, but need to do some setup work before and cleanup work after. In which case your configuration file would look like: pre-start script # setup work here end script exec # daemon command-line here post-stop script # cleanup work here end script You should omit the pre-start or post-stop script if you're not using them. Another common case is where the daemon takes a little more to get going than just exec'ing a path with arguments, in which case you'd want to use 'script' instead of 'exec'. A good pattern is: script # setup work here # work needed to get going here # daemon command-line here, forcing it to stay in the foreground # clean-up work here end script In this case we need the daemon to stay in the foreground, otherwise the clean-up work would happen while it's running. You cannot use the 'expect' stanza with this style of configuration. There's also a middle-ground: script # setup work here # work needed to get going here exec # daemon command-line here, but again in the foreground end script post-stop script # cleanup work here end script This merges the 'pre-start' into the 'script' but keeps the 'post-stop' separate. Note the use of 'exec' for the daemon, this ensures that it has the same PID as the script that ran it, which is worthwhile. You also cannot use 'expect' with this style. Finally there's another style of configuration that is sometimes useful; this is for when you have no need of a process running but only need to perform work on startup and on shutdown - for example changing settings. This looks like: pre-start script # work on startup here end script post-stop script # work on shutdown here end script Upstart fully supports this, and it's known upstream as the "state pattern". You may also see the "run once pattern" which consists only of a 'pre-start'.