grabconsole
programgrabconsole file [command ...]
grabconsole
redirects messages to
/dev/console
to the given file, which must be the slave
side of a pseudoterminal. It may be specified as either a filename or
a file descriptor. Then it execs the given command
, if any.
This is useful to log such messages to disk when syslogd
is not running but some services log through syslog
.
$ cat /service/console-log/run #!/bin/sh exec \ ptyget \ sh -c ' exec 6<&- 7<&- && setblock +4 && grabconsole 5 && exec <&4 \ setuidgid loguser \ multilog t ./main'
ptyget
allocates a pseudoterminal. setblock
sets
the master side to be blocking (so a process reading the master side will
wait for input instead of getting EAGAIN
when there is currently
no input to be read). grabconsole
redirects
/dev/console
messages to the slave side of the pseudoterminal.
multilog
, running as loguser
, reads console
messages from the master side of the pseudoterminal and writes them to
./main
. Note that this may cause problems with console logins
unless logins use a different device referring to the console, such as
/dev/tty1
on Linux.
xterm -e sh -ec 'grabconsole 0; setblock +0; exec cat'
is equivalent to xconsole
.