mirror of
https://github.com/troglobit/finit.git
synced 2026-10-02 05:52:48 +07:00
Reference sections kept pointing at the line-based format they no longer
document. `sysv` and `task` sent the reader to Services for "<COND>",
the cgroups chapter opened by listing three legacy directives and then
explained further down that only two of them exist here, and the logging
chapter still gave "log:prio:facility.level,tag:ident" as the full
syntax.
Some claims were wrong independent of the format:
- a sysv is a supervised daemon, grouped with service in
SVC_TYPE_DAEMON, not a variation on task
- restart-max has no upper bound of 255, or any other
- the built-in rescue fallback runs in 12345789, not 12345
- conditional loading quotes system/10-hotplug.conf, not
system/hotplug.conf
- the key spells conflicts, not conflict
- the built-in getty no longer wants TERM last, it is a key
`if` takes either a service name or, in angle brackets, a condition,
decided in svc_ifthen(). Only the examples showed this, so it is now
said.
Terminology follows the split index.md already draws: a block is the new
format, a stanza the line-based one.
src/rescue.conf was still line-based, missed because it sits in src/
rather than system/ or contrib/.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
83 lines
2.8 KiB
Markdown
83 lines
2.8 KiB
Markdown
General Logging
|
|
===============
|
|
|
|
**Syntax:** `log { size = 200k count = 5 }`
|
|
|
|
Log rotation for run/task/services that redirect output to a log file
|
|
with their own `log` block. Global setting, applies to all services.
|
|
|
|
The size can be given as bytes, without a specifier, or in `k`, `M`,
|
|
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.
|
|
|
|
Redirecting Output
|
|
------------------
|
|
|
|
The `run`, `task`, and `service` blocks take a `log` block of their own,
|
|
redirecting `stderr` and `stdout` of the application to a file or syslog
|
|
using the native `logit` tool. This is useful for programs that do not
|
|
support syslog on their own, which is sometimes the case when running
|
|
in the foreground.
|
|
|
|
An empty block means syslog with the defaults, and three keys adjust it:
|
|
|
|
| Setting | Description |
|
|
|---|---|
|
|
| `file` | Write to this path instead of syslog |
|
|
| `priority` | Syslog `facility.level`, default `daemon.info` |
|
|
| `identity` | Syslog tag, default the basename of the command |
|
|
|
|
`/dev/console` and `/dev/null` are spelled as the paths they are:
|
|
|
|
service foo { log { } command = "foo" } # syslog
|
|
service foo { log { file = "/var/log/foo" } command = "foo" } # a file
|
|
service foo { log { file = "/dev/console" } command = "foo" } # console
|
|
service foo { log { file = "/dev/null" } command = "foo" } # discard
|
|
|
|
> [!NOTE]
|
|
> A `log` block at file scope is a different setting -- that one is the
|
|
> global rotation above, and it takes only `size` and `count`.
|
|
|
|
Log rotation is controlled using the global `log` setting.
|
|
|
|
**Example:**
|
|
|
|
service ntpd {
|
|
description = "NTP daemon"
|
|
log {
|
|
priority = "user.warn"
|
|
identity = "ntpd"
|
|
}
|
|
command = "/sbin/ntpd pool.ntp.org"
|
|
}
|
|
|
|
Output Buffering
|
|
----------------
|
|
|
|
When using the `log` block, Finit redirects the service's stdout and
|
|
stderr to a pipe connected to a logger process. Programs detect this as
|
|
non-interactive output (i.e., `isatty()` returns false) and typically
|
|
switch from line-buffered to fully-buffered mode.
|
|
|
|
Most well-behaved daemons explicitly flush their output or use syslog
|
|
directly, so this is rarely an issue. However, if a service's log
|
|
messages appear delayed or batched, you can force line-buffered output
|
|
by wrapping the command with `stdbuf`:
|
|
|
|
service myservice {
|
|
description = "My service"
|
|
log { }
|
|
command = "/usr/bin/stdbuf -oL /path/to/command"
|
|
}
|
|
|
|
The `-oL` option forces line-buffered output, and `-o0` forces unbuffered
|
|
output. See `stdbuf(1)` for details.
|
|
|
|
> [!NOTE]
|
|
> Using `stdbuf` is rarely necessary. Only use it if you observe actual
|
|
> buffering issues with a specific service.
|