mirror of
https://github.com/troglobit/finit.git
synced 2026-10-17 10:49:34 +00:00
The syntax overview no longer describes a line-based format, since that is not what the rest of the documentation shows. It now covers the grammar, the two naming conventions, the nine aliases, and the leading '-' on a path, and it says plainly that both formats are still read and told apart per file by content. Without that, a reader with an existing configuration is left wondering what happened to it. service-opts.md was a list of modifiers to place between a directive and its command, so it needed rewriting rather than translating: there are no positions left to describe. It is now grouped by what the settings do. conditions.md needed correcting. It presented '!' as a condition prefix alongside '~'. It is neither a condition nor a negation, it is a flag on the block that means one thing on a service and another on a run or task, so it is spelled reload-signal and required here, and the page maps the old form to both. Two things the pages claimed are not true. The kill delay range is 1-300, not 1-60, and stop and reload scripts are no longer run without a timeout. ChangeLog.md keeps its line-based examples. Those sit in historical release entries, and rewriting them in a syntax that did not exist at the time would misdate the format. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
75 lines
2.2 KiB
Markdown
75 lines
2.2 KiB
Markdown
General Logging
|
|
===============
|
|
|
|
**Syntax:** `log size:200k count:5`
|
|
|
|
Log rotation for run/task/services using the `log` sub-option with
|
|
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`,
|
|
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` stanzas also allow the keyword `log` to
|
|
redirect `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.
|
|
|
|
The full syntax is:
|
|
|
|
log:/path/to/file
|
|
log:prio:facility.level,tag:ident
|
|
log:console
|
|
log:null
|
|
log
|
|
|
|
Default `prio` is `daemon.info` and default `tag` is the basename of the
|
|
service or run/task command.
|
|
|
|
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.
|