diff --git a/doc/service.md b/doc/service.md new file mode 100644 index 00000000..ef84cdb3 --- /dev/null +++ b/doc/service.md @@ -0,0 +1,26 @@ +# Services + +## State Machine + +![A service's state machine](svc-machine.png "A service's state machine") + +A service is bound to a state machine that is in one of six (6) +states. For `run`s and `task`s there is an additional end state called +`DONE`, not shown in the diagram for brevity. All services start in +the `HALTED` state. + +The current state depends on the two following conditions: + +* `E`: Service enabled. In order for `E` to be satisfied, the service + must be allowed to run in the current runlevel and must not be + blocked. A service may be blocked for several reasons: + + - The user has manually stopped the service using `initctl stop + JOB`. + + - The binary repeatedly dies after being started. I.e. keeps + crashing. + + - The binary is missing in the filesystem. + +* `C`: Service conditions are satisfied. diff --git a/doc/svc-machine.png b/doc/svc-machine.png new file mode 100644 index 00000000..a0903455 Binary files /dev/null and b/doc/svc-machine.png differ