mirror of
https://github.com/troglobit/finit.git
synced 2026-11-06 15:51:03 +00:00
doc: Major refactor, change layout
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
ad08f30b31
commit
352ffb1582
1 file changed
+242
-173
+242
-173
@@ -3,7 +3,20 @@ Configuration
|
|||||||
|
|
||||||
* [Introduction](#introduction)
|
* [Introduction](#introduction)
|
||||||
* [Service Wrapper Scripts](#service-wrapper-scripts)
|
* [Service Wrapper Scripts](#service-wrapper-scripts)
|
||||||
* [Syntax](#syntax)
|
* [Configuration File Syntax](#configuration-file-syntax)
|
||||||
|
* [Hostname](#hostname)
|
||||||
|
* [Kernel Modules](#kernel-modules)
|
||||||
|
* [Networking](#networking)
|
||||||
|
* [Resource Limits](#resource-limits)
|
||||||
|
* [Runlevels](#runlevels)
|
||||||
|
* [One-shot Commands (sequence)](#one-shot-commands--sequence-)
|
||||||
|
* [One-shot Commands (parallel)](#one-shot-commands--parallel-)
|
||||||
|
* [SysV Init Scripts](#sysv-init-scripts)
|
||||||
|
* [Services](#services)
|
||||||
|
* [Run-parts Scripts](#run-parts-scripts)
|
||||||
|
* [Including Finit Configs](#including-finit-configs)
|
||||||
|
* [General Logging](#general-logging)
|
||||||
|
* [TTYs and Consoles](#ttys-and-consoles)
|
||||||
* [Non-privileged Services](#non-privileged-services)
|
* [Non-privileged Services](#non-privileged-services)
|
||||||
* [Redirecting Output](#redirecting-output)
|
* [Redirecting Output](#redirecting-output)
|
||||||
* [Limitations](#limitations)
|
* [Limitations](#limitations)
|
||||||
@@ -87,240 +100,295 @@ example employs a wrapper script in `/etc/start.d`.
|
|||||||
> instead of sending SIGHUP at restart/reload events.
|
> instead of sending SIGHUP at restart/reload events.
|
||||||
|
|
||||||
|
|
||||||
Syntax
|
Configuration File Syntax
|
||||||
------
|
-------------------------
|
||||||
|
|
||||||
* `host <NAME>`, or `hostname <NAME>`
|
### Hostname
|
||||||
Set system hostname to NAME, unless `/etc/hostname` exists in which
|
|
||||||
case the contents of that file is used.
|
|
||||||
|
|
||||||
* `module <MODULE> [ARGS]`
|
**Syntax:** `host <NAME>`, or `hostname <NAME>`
|
||||||
Load a kernel module, with optional arguments. Similar to `insmod`
|
|
||||||
command line tool.
|
|
||||||
|
|
||||||
Note, there is both a `modules-load.so` and a `modprobe.so` plugin
|
Set system hostname to NAME, unless `/etc/hostname` exists in which case
|
||||||
that can handle module loading better. The former supports loading
|
the contents of that file is used.
|
||||||
from `/etc/modules-load.d/`, and the latter uses kernel modinfo to
|
|
||||||
automatically load (or coldplug) every required module. For hotplug
|
|
||||||
we recommend the BusyBox mdev tool, add to `/etc/mdev.conf`:
|
|
||||||
|
|
||||||
$MODALIAS=.* root:root 0660 @modprobe -b "$MODALIAS"
|
|
||||||
|
|
||||||
* `network <PATH>`
|
### Kernel Modules
|
||||||
Script or program to bring up networking, with optional arguments
|
|
||||||
|
|
||||||
* `rlimit [hard|soft] RESOURCE <LIMIT|unlimited>` Set the hard or soft
|
**Syntax:** `module <MODULE> [ARGS]`
|
||||||
limit for a resource, or both if that argument is omitted. `RESOURCE`
|
|
||||||
is the lower-case `RLIMIT_` string constants from `setrlimit(2)`,
|
Load a kernel module, with optional arguments. Similar to `insmod`
|
||||||
without the prefix. E.g. to set `RLIMIT_CPU`, use `cpu`.
|
command line tool.
|
||||||
|
|
||||||
|
Note, there is both a `modules-load.so` and a `modprobe.so` plugin
|
||||||
|
that can handle module loading better. The former supports loading
|
||||||
|
from `/etc/modules-load.d/`, and the latter uses kernel modinfo to
|
||||||
|
automatically load (or coldplug) every required module. For hotplug
|
||||||
|
we recommend the BusyBox mdev tool, add to `/etc/mdev.conf`:
|
||||||
|
|
||||||
|
$MODALIAS=.* root:root 0660 @modprobe -b "$MODALIAS"
|
||||||
|
|
||||||
|
|
||||||
|
### Networking
|
||||||
|
|
||||||
|
**Syntax:** `network <PATH>`
|
||||||
|
|
||||||
|
Script or program to bring up networking, with optional arguments.
|
||||||
|
|
||||||
|
Deprecated. We recommend using task/run or `/etc/network/interfaces` if
|
||||||
|
you have a system with ifupdown.
|
||||||
|
|
||||||
|
|
||||||
|
### Resource Limits
|
||||||
|
|
||||||
|
**Syntax:** `rlimit [hard|soft] RESOURCE <LIMIT|unlimited>`
|
||||||
|
|
||||||
|
Set the hard or soft limit for a resource, or both if that argument is
|
||||||
|
omitted. `RESOURCE` is the lower-case `RLIMIT_` string constants from
|
||||||
|
`setrlimit(2)`, without prefix. E.g. to set `RLIMIT_CPU`, use `cpu`.
|
||||||
|
|
||||||
LIMIT is an integer that depends on the resource being modified, see
|
LIMIT is an integer that depends on the resource being modified, see
|
||||||
the man page, or the kernel `/proc/PID/limits` file, for details.
|
the man page, or the kernel `/proc/PID/limits` file, for details.
|
||||||
Finit versions before v3.1 used `infinity` for `unlimited`, which is
|
Finit versions before v3.1 used `infinity` for `unlimited`, which is
|
||||||
still supported, albeit deprecated.
|
still supported, albeit deprecated.
|
||||||
|
|
||||||
# No process is allowed more than 8MB of address space
|
# No process is allowed more than 8MB of address space
|
||||||
rlimit hard as 8388608
|
rlimit hard as 8388608
|
||||||
|
|
||||||
# Core dumps may be arbitrarily large
|
# Core dumps may be arbitrarily large
|
||||||
rlimit soft core infinity
|
rlimit soft core infinity
|
||||||
|
|
||||||
# CPU limit for all services, soft & hard = 10 sec
|
# CPU limit for all services, soft & hard = 10 sec
|
||||||
rlimit cpu 10
|
rlimit cpu 10
|
||||||
|
|
||||||
`rlimit` can be set globally, in `/etc/finit.conf`, or locally for
|
`rlimit` can be set globally, in `/etc/finit.conf`, or locally for
|
||||||
a set of task/run/services, in `/etc/finit.d/*.conf`.
|
a set of task/run/services, in `/etc/finit.d/*.conf`.
|
||||||
|
|
||||||
* `runlevel <N>`
|
|
||||||
N is the runlevel number 1-9, where 6 is reserved for reboot.
|
|
||||||
Default is 2.
|
|
||||||
|
|
||||||
* `run [LVLS] <COND> /path/to/cmd ARGS -- Optional description`
|
### Runlevels
|
||||||
One-shot command to run in sequence when entering a runlevel, with
|
|
||||||
optional arguments and description.
|
**Syntax:** `runlevel <N>`
|
||||||
|
|
||||||
|
N is the runlevel number 1-9, where 6 is reserved for reboot.
|
||||||
|
|
||||||
|
Default: 2
|
||||||
|
|
||||||
|
|
||||||
|
### One-shot Commands (sequence)
|
||||||
|
|
||||||
|
**Syntax:** `run [LVLS] <COND> /path/to/cmd ARGS -- Optional description`
|
||||||
|
|
||||||
|
One-shot command to run in sequence when entering a runlevel, with
|
||||||
|
optional arguments and description.
|
||||||
|
|
||||||
`run` commands are guaranteed to be completed before running the next
|
`run` commands are guaranteed to be completed before running the next
|
||||||
command. Highly useful if true serialization is needed.
|
command. Highly useful if true serialization is needed.
|
||||||
|
|
||||||
* `task [LVLS] <COND> /path/to/cmd ARGS -- Optional description`
|
|
||||||
One-shot like 'run', but starts in parallel with the next command.
|
### One-shot Commands (parallel)
|
||||||
|
|
||||||
|
**Syntax:** `task [LVLS] <COND> /path/to/cmd ARGS -- Optional description`
|
||||||
|
|
||||||
|
One-shot like 'run', but starts in parallel with the next command.
|
||||||
|
|
||||||
Both `run` and `task` commands are run in a shell, so pipes and
|
Both `run` and `task` commands are run in a shell, so pipes and
|
||||||
redirects can be freely used:
|
redirects can be freely used:
|
||||||
|
|
||||||
task [s] echo "foo" | cat >/tmp/bar
|
task [s] echo "foo" | cat >/tmp/bar
|
||||||
|
|
||||||
* `sysv [LVLS] <COND> /path/to/init-script -- Optional description`__
|
|
||||||
Similar to `task` is the `sysv` stanza, which can be used to call SysV
|
### SysV Init Scripts
|
||||||
style scripts. The primary intention for this command is to be able to
|
|
||||||
re-use much of existing setup and init scripts in Linux distributions.
|
**Syntax:** `sysv [LVLS] <COND> /path/to/init-script -- Optional description`
|
||||||
|
|
||||||
|
Similar to `task` is the `sysv` stanza, which can be used to call SysV
|
||||||
|
style scripts. The primary intention for this command is to be able to
|
||||||
|
re-use much of existing setup and init scripts in Linux distributions.
|
||||||
|
|
||||||
When entering an allowed runlevel, Finit calls `init-script start`,
|
When entering an allowed runlevel, Finit calls `init-script start`, when
|
||||||
when entering a disallowed runlevel, Finit calls `init-script stop`,
|
entering a disallowed runlevel, Finit calls `init-script stop`, and if
|
||||||
and if the Finit .conf, where `sysv` stanza is declared, is modified,
|
the Finit .conf, where `sysv` stanza is declared, is modified, Finit
|
||||||
Finit calls `init-script restart` on `initctl reload`. Similar to
|
calls `init-script restart` on `initctl reload`. Similar to how
|
||||||
how `service` stanzas work.
|
`service` stanzas work.
|
||||||
|
|
||||||
Forking services started with `sysv` scripts can be monitored by Finit
|
Forking services started with `sysv` scripts can be monitored by Finit
|
||||||
by declaring the PID file to look for: `pid:!/path/to/pidfile.pid`.
|
by declaring the PID file to look for: `pid:!/path/to/pidfile.pid`.
|
||||||
|
|
||||||
|
|
||||||
|
### Services
|
||||||
|
|
||||||
|
**Syntax:** `service [LVLS] <COND> /path/to/daemon ARGS -- Optional description`
|
||||||
|
|
||||||
|
Service, or daemon, to be monitored and automatically restarted if it
|
||||||
|
exits prematurely. Finit tries to restart services that die 10 times
|
||||||
|
before giving up, then you have to `initctl restart NAME` it manually.
|
||||||
|
|
||||||
* `service [LVLS] <COND> /path/to/daemon ARGS -- Optional description`
|
For daemons that support it, we recommend appending `--foreground`,
|
||||||
Service, or daemon, to be monitored and automatically restarted if it
|
`--no-background`, `-n`, `-F`, or similar command line argument to
|
||||||
exits prematurely. Finit tries to restart services that die 10 times
|
prevent them from forking off a sub-process in the background. This is
|
||||||
before giving up, then you have to `initctl restart NAME` it manually.
|
the most reliable way to monitor a service.
|
||||||
|
|
||||||
|
However, not all daemons support running in the foreground, or they may
|
||||||
|
start logging to the foreground as well, these are called forking
|
||||||
|
services and are supported using the same syntax as forking `sysv`
|
||||||
|
services, using the `pid:!/path/to/pidfile.pid` syntax.
|
||||||
|
|
||||||
For daemons that support it, we recommend appending `--foreground`,
|
**Example:**
|
||||||
`--no-background`, `-n`, `-F`, or similar command line argument to
|
|
||||||
prevent them from forking off a sub-process in the background. This
|
|
||||||
is the most reliable way to monitor a service.
|
|
||||||
|
|
||||||
However, not all daemons support running in the foreground, or they
|
In the case of `ospfd` (below), we omit the `-d` flag (daemonize) to
|
||||||
may start logging to the foreground as well, these are called forking
|
prevent it from forking to the background:
|
||||||
services and are supported using the same syntax as forking `sysv`
|
|
||||||
services, using the `pid:!/path/to/pidfile.pid` syntax.
|
service [2345] <pid/zebra> /sbin/ospfd -- OSPF daemon
|
||||||
|
|
||||||
|
`[2345]` denote the runlevels `ospfd` is allowed to run in, they are
|
||||||
|
optional and default to level 2-5 if omitted.
|
||||||
|
|
||||||
**Example:**
|
`<...>` is the condition for starting `ospfd`. In this example Finit
|
||||||
In the case of `ospfd` (below), we omit the `-d` flag (daemonize) to
|
waits for another service, `zebra`, to have created its PID file in
|
||||||
prevent it from forking to the background:
|
`/var/run/quagga/zebra.pid` before starting `ospfd`. Finit watches
|
||||||
|
*all* files in `/var/run`, for each file named `*.pid`, or `*/pid`,
|
||||||
|
Finit opens it and find the matching `NAME:ID` using the PID.
|
||||||
|
|
||||||
service [2345] <pid/zebra> /sbin/ospfd -- OSPF daemon
|
Some services do not maintain a PID file and rather than patching each
|
||||||
|
application Finit provides a workaround. A `pid` keyword can be set
|
||||||
|
to have Finit automatically create (when starting) and later remove
|
||||||
|
(when stopping) the PID file. The file is created in the `/var/run`
|
||||||
|
directory using the `basename(1)` of the service. The default can be
|
||||||
|
modified with an optional `pid:`-argument:
|
||||||
|
|
||||||
`[2345]` denote the runlevels `ospfd` is allowed to run in, they are
|
pid[:[/path/to/]filename[.pid]]
|
||||||
optional and default to level 2-5 if omitted.
|
|
||||||
|
|
||||||
`<...>` is the condition for starting `ospfd`. In this example Finit
|
|
||||||
waits for another service, `zebra`, to have created its PID file in
|
|
||||||
`/var/run/quagga/zebra.pid` before starting `ospfd`. Finit watches
|
|
||||||
*all* files in `/var/run`, for each file named `*.pid`, or `*/pid`,
|
|
||||||
Finit opens it and find the matching `NAME:ID` using the PID.
|
|
||||||
|
|
||||||
Some services do not maintain a PID file and rather than patching each
|
For example, by adding `pid:/run/foo.pid` to the service `/sbin/bar`,
|
||||||
application Finit provides a workaround. A `pid` keyword can be set
|
that PID file will, not only be created and removed automatically, but
|
||||||
to have Finit automatically create (when starting) and later remove
|
also be used by the Finit condition subsystem. So a service/run/task
|
||||||
(when stopping) the PID file. The file is created in the `/var/run`
|
can depend on `<pid/bar>`.
|
||||||
directory using the `basename(1)` of the service. The default can be
|
|
||||||
modified with an optional `pid:`-argument:
|
|
||||||
|
|
||||||
pid[:[/path/to/]filename[.pid]]
|
> For a detailed description of conditions, and how to debug them,
|
||||||
|
> see the [Finit Conditions](conditions.md) document.
|
||||||
|
|
||||||
For example, by adding `pid:/run/foo.pid` to the service `/sbin/bar`,
|
If a service should not be automatically started, it can be configured
|
||||||
that PID file will, not only be created and removed automatically, but
|
as manual with the optional `manual` argument. The service can then be
|
||||||
also be used by the Finit condition subsystem. So a service/run/task
|
started at any time by running `initctl start <service>`.
|
||||||
can depend on `<pid/bar>`.
|
|
||||||
|
|
||||||
> For a detailed description of conditions, and how to debug them, see
|
manual:yes
|
||||||
> the [Finit Conditions](conditions.md) document.
|
|
||||||
|
|
||||||
If a service should not be automatically started, it can be configured
|
The name of a service, shown by the `initctl` tool, defaults to the
|
||||||
as manual with the optional `manual` argument. The service can then be
|
basename of the service executable. It can be changed with the
|
||||||
started at any time by running `initctl start <service>`.
|
optional `name` argument:
|
||||||
|
|
||||||
manual:yes
|
name:<service-name>
|
||||||
|
|
||||||
The name of a service, shown by the `initctl` tool, defaults to the
|
When stopping a service (run/task/sysv/service), either manually or
|
||||||
basename of the service executable. It can be changed with the
|
when moving to another runlevel, Finit starts by sending `SIGTERM`, to
|
||||||
optional `name` argument:
|
allow the process to shut down gracefully. If the process has not
|
||||||
|
been collected within 3 seconds, Finit sends `SIGKILL`. To halt the
|
||||||
|
process using a different signal, use the option `halt:SIGNAL`, e.g.,
|
||||||
|
`halt:SIGPWR`. To change the delay between your halt signal and KILL,
|
||||||
|
use the option `kill:SEC`, e.g., `kill:10` to wait 10 seconds before
|
||||||
|
sending `SIGKILL`.
|
||||||
|
|
||||||
name:<service-name>
|
|
||||||
|
|
||||||
When stopping a service (run/task/sysv/service), either manually or
|
### Run-parts Scripts
|
||||||
when moving to another runlevel, Finit starts by sending `SIGTERM`, to
|
|
||||||
allow the process to shut down gracefully. If the process has not
|
|
||||||
been collected within 3 seconds, Finit sends `SIGKILL`. To halt the
|
|
||||||
process using a different signal, use the option `halt:SIGNAL`, e.g.,
|
|
||||||
`halt:SIGPWR`. To change the delay between your halt signal and KILL,
|
|
||||||
use the option `kill:SEC`, e.g., `kill:10` to wait 10 seconds before
|
|
||||||
sending `SIGKILL`.
|
|
||||||
|
|
||||||
* `runparts <DIR>`
|
**Syntax:** `runparts <DIR>`
|
||||||
Call [run-parts(8)][] on `DIR` to run start scripts. All executable
|
|
||||||
files, or scripts, in the directory are called, in alphabetic order.
|
|
||||||
The scripts in this directory are executed at the very end of runlevel
|
|
||||||
`S`, bootstrap.
|
|
||||||
|
|
||||||
It can be beneficial to use `S01name`, `S02othername`, etc. if there
|
Call [run-parts(8)][] on `DIR` to run start scripts. All executable
|
||||||
is a dependency order between the scripts. Symlinks to existing
|
files, or scripts, in the directory are called, in alphabetic order.
|
||||||
daemons can talso be used, but make sure they daemonize by default.
|
The scripts in this directory are executed at the very end of runlevel
|
||||||
|
`S`, bootstrap.
|
||||||
|
|
||||||
Similar to the `/etc/rc.local` shell script, make sure that all your
|
It can be beneficial to use `S01name`, `S02othername`, etc. if there
|
||||||
services and programs either terminate or start in the background or
|
is a dependency order between the scripts. Symlinks to existing
|
||||||
you will block Finit.
|
daemons can talso be used, but make sure they daemonize by default.
|
||||||
|
|
||||||
* `include <CONF>`
|
Similar to the `/etc/rc.local` shell script, make sure that all your
|
||||||
Include another configuration file. Absolute path required.
|
services and programs either terminate or start in the background or
|
||||||
|
you will block Finit.
|
||||||
|
|
||||||
* `log size:200k count:5`
|
|
||||||
|
|
||||||
Log rotation for run/task/services using the `log` sub-option with
|
### Including Finit Configs
|
||||||
redirection to a log file. Global setting, applies to all services.
|
|
||||||
|
|
||||||
The size can be given as bytes, without a specifier, or in `k`, `M`,
|
**Syntax:** `include <CONF>`
|
||||||
or `G`, e.g. `size:10M`, or `size:3G`. A value of `size:0` disables
|
|
||||||
log rotation. The default is `200k`.
|
|
||||||
|
|
||||||
The count value is recommended to be between 1-5, with a default 5.
|
Include another configuration file. Absolute path required.
|
||||||
Setting count to 0 means the logfile will be truncated when the MAX
|
|
||||||
size limit is reached.
|
|
||||||
|
|
||||||
* `tty [LVLS] <DEV> [BAUD] [noclear] [nowait] [nologin] [TERM]`
|
|
||||||
`tty [LVLS] <CMD> <ARGS> [noclear] [nowait]`
|
|
||||||
The first variant of this option uses the built-in getty on the given
|
|
||||||
TTY device DEV, in the given runlevels. The DEV may be the special
|
|
||||||
keyword `@console`, or `console`, useful on embedded systems.
|
|
||||||
|
|
||||||
The default baud rate is 0, i.e., keep kernel default.
|
### General Logging
|
||||||
|
|
||||||
**Example:**
|
**Syntax:** `log size:200k count:5`
|
||||||
|
|
||||||
tty [12345] /dev/ttyAMA0 115200 noclear vt220
|
Log rotation for run/task/services using the `log` sub-option with
|
||||||
|
redirection to a log file. Global setting, applies to all services.
|
||||||
|
|
||||||
The second `tty` syntax variant is for using an external getty, like
|
The size can be given as bytes, without a specifier, or in `k`, `M`,
|
||||||
agetty or the BusyBox getty.
|
or `G`, e.g. `size:10M`, or `size:3G`. A value of `size:0` disables
|
||||||
|
log rotation. The default is `200k`.
|
||||||
|
|
||||||
|
The count value is recommended to be between 1-5, with a default 5.
|
||||||
|
Setting count to 0 means the logfile will be truncated when the MAX
|
||||||
|
size limit is reached.
|
||||||
|
|
||||||
|
### TTYs and Consoles
|
||||||
|
|
||||||
|
**Syntax:** `tty [LVLS] <DEV> [BAUD] [noclear] [nowait] [nologin] [TERM]`
|
||||||
|
`tty [LVLS] <CMD> <ARGS> [noclear] [nowait]`
|
||||||
|
|
||||||
|
The first variant of this option uses the built-in getty on the given
|
||||||
|
TTY device DEV, in the given runlevels. The DEV may be the special
|
||||||
|
keyword `@console`, or `console`, useful on embedded systems.
|
||||||
|
|
||||||
|
The default baud rate is 0, i.e., keep kernel default.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
|
||||||
|
tty [12345] /dev/ttyAMA0 115200 noclear vt220
|
||||||
|
|
||||||
|
The second `tty` syntax variant is for using an external getty, like
|
||||||
|
agetty or the BusyBox getty.
|
||||||
|
|
||||||
By default both variants *clear* the TTY and *wait* for the user to
|
By default both variants *clear* the TTY and *wait* for the user to
|
||||||
press enter before starting getty.
|
press enter before starting getty.
|
||||||
|
|
||||||
**Example:**
|
**Example:**
|
||||||
|
|
||||||
tty [12345] /sbin/getty -L 115200 /dev/ttyAMA0 vt100
|
tty [12345] /sbin/getty -L 115200 /dev/ttyAMA0 vt100
|
||||||
tty [12345] /sbin/agetty -L ttyAMA0 115200 vt100 nowait
|
tty [12345] /sbin/agetty -L ttyAMA0 115200 vt100 nowait
|
||||||
|
|
||||||
The `noclear` option disables clearing the TTY after each session.
|
The `noclear` option disables clearing the TTY after each session.
|
||||||
Clearing the TTY when a user logs out is usually preferable.
|
Clearing the TTY when a user logs out is usually preferable.
|
||||||
|
|
||||||
The `nowait` option disables the `press Enter to activate console`
|
The `nowait` option disables the `press Enter to activate console`
|
||||||
message before actually starting the getty program. On small and
|
message before actually starting the getty program. On small and
|
||||||
embedded systems running multiple unused getty wastes both memory
|
embedded systems running multiple unused getty wastes both memory
|
||||||
and CPU cycles, so `wait` is the preferred default.
|
and CPU cycles, so `wait` is the preferred default.
|
||||||
|
|
||||||
The `nologin` option disables getty and `/bin/login`, and gives the
|
The `nologin` option disables getty and `/bin/login`, and gives the
|
||||||
user a root (login) shell on the given TTY `<DEV>` immediately.
|
user a root (login) shell on the given TTY `<DEV>` immediately.
|
||||||
Needless to say, this is a rather insecure option, but can be very
|
Needless to say, this is a rather insecure option, but can be very
|
||||||
useful for developer builds, during board bringup, or similar.
|
useful for developer builds, during board bringup, or similar.
|
||||||
|
|
||||||
Notice the ordering, the `TERM` option to the built-in getty must be
|
Notice the ordering, the `TERM` option to the built-in getty must be
|
||||||
the last argument.
|
the last argument.
|
||||||
|
|
||||||
Embedded systems may want to enable automatic `DEV` by supplying the
|
Embedded systems may want to enable automatic `DEV` by supplying the
|
||||||
special `@console` device. This works regardless weather the system
|
special `@console` device. This works regardless weather the system
|
||||||
uses `ttyS0`, `ttyAMA0`, `ttyMXC0`, or anything else. Finit figures
|
uses `ttyS0`, `ttyAMA0`, `ttyMXC0`, or anything else. Finit figures
|
||||||
it out by querying sysfs: `/sys/class/tty/console/active`. The speed
|
it out by querying sysfs: `/sys/class/tty/console/active`. The speed
|
||||||
can be omitted to keep the kernel default.
|
can be omitted to keep the kernel default.
|
||||||
|
|
||||||
**Example:**
|
**Example:**
|
||||||
|
|
||||||
tty [12345] @console noclear vt220
|
tty [12345] @console noclear vt220
|
||||||
|
|
||||||
On really bare bones systems Finit offers a fallback shell, which
|
On really bare bones systems Finit offers a fallback shell, which
|
||||||
should not be enabled on production systems since. This because it
|
should not be enabled on production systems since. This because it
|
||||||
may give a user root access without having to log in. However, for
|
may give a user root access without having to log in. However, for
|
||||||
bringup and system debugging it can come in handy:
|
bringup and system debugging it can come in handy:
|
||||||
|
|
||||||
configure --enable-fallback-shell
|
configure --enable-fallback-shell
|
||||||
|
|
||||||
One can also use the `service` stanza to start a stand-alone shell:
|
One can also use the `service` stanza to start a stand-alone shell:
|
||||||
|
|
||||||
|
service [12345] /bin/sh -l
|
||||||
|
|
||||||
service [12345] /bin/sh -l
|
|
||||||
|
|
||||||
### Non-privileged Services
|
### Non-privileged Services
|
||||||
|
|
||||||
@@ -340,6 +408,7 @@ multiple web servers, add `:ID` somewhere between the `run`, `task`,
|
|||||||
Without the `:ID` to the service the latter will overwrite the former
|
Without the `:ID` to the service the latter will overwrite the former
|
||||||
and only the old web server would be started and supervised.
|
and only the old web server would be started and supervised.
|
||||||
|
|
||||||
|
|
||||||
### Redirecting Output
|
### Redirecting Output
|
||||||
|
|
||||||
The `run`, `task`, and `service` stanzas also allow the keyword `log` to
|
The `run`, `task`, and `service` stanzas also allow the keyword `log` to
|
||||||
|
|||||||
Reference in new issue
Block a user