One long-standing issue in Artix's runit implementation is services without
log folders cluttering the console. They tend to be especially inconvenient for users who don't use DMs, since often, while they're typing their username, password, commands, etc., a log message will come and break the line.
Ideally, I think, every service should have a log folder (maybe with a wrapper script to handle the logging boilerplate, if desired). This way, no logs are lostâ„¢ (unlike what happens with the often suggested "add
exec >/dev/null 2>&1 to run file")
If it's not feasible to make every service have such folders, is it at least possible to add a "catch-all logger" service for such occassions? For example:
-
exec > /run/stage2.log 2>&1 during /etc/runit/2, right before
runsvdir starts. Then every process forked off /etc/runit/2 (eventually, every service of the system), will either log to
stage2.log, or to the "sub-service" in the log folder.
- An unsupervised
svlogd process where stage 2's stdout goes to.
- Skarnet-style fifo trick (https://www.mail-archive.com/
[email protected]/msg02789.html), which would allow a supervised "catch-all logger" (but might require patching runsv so it ignores SIGPIPE).
This way, such services, rather than clogging the console, would be sent to a "well behaved", standard place.
One more example which i use myself in custom scripts set:
mkfifo /run/sidal.log
logger -t sidal < /run/sidal.log &
start-services-command 2> /run/sidal.log