Eu gostaria de systemd-journald no systemd 219 (no el7, portanto o pacote é systemd-219-30.el7_3.9.x86_64) para escutar as mensagens do syslog em /run/systemd/journal/dev-log
e ter /dev/log
a < em> symlink para esse arquivo. Este é o comportamento padrão das versões mais recentes do systemd-journald.
O estoque /lib/systemd/system/sytemd-journald.socket
se parece com isto:
[Unit]
Description=Journal Socket
Documentation=man:systemd-journald.service(8) man:journald.conf(5)
DefaultDependencies=no
Before=sockets.target
[Socket]
ListenStream=/run/systemd/journal/stdout
ListenDatagram=/run/systemd/journal/socket
ListenDatagram=/dev/log
SocketMode=0666
PassCredentials=yes
PassSecurity=yes
ReceiveBuffer=8M
Eu modifico esse arquivo para remover a linha ListenDatagram=/dev/log
.
Eu criei uma nova unidade, /etc/systemd/system/systemd-journal-dev-log.socket
que se parece com:
[Unit]
Description=Journal Socket (/dev/log)
Documentation=man:systemd-journald.service(8) man:journald.conf(5)
DefaultDependencies=no
Before=sockets.target
IgnoreOnIsolate=yes
[Socket]
Service=systemd-journald.service
ListenDatagram=/run/systemd/journal/dev-log
Symlinks=/dev/log
SocketMode=0666
PassCredentials=yes
PassSecurity=yes
ReceiveBuffer=8M
SendBuffer=8M
[Install]
WantedBy=systemd-journald.service
Eu modifiquei /lib/systemd/system/systemd-journald.service
para incluir:
Sockets=systemd-journald.socket systemd-journald-dev-log.socket
Eu recarrego o systemd ( systemctl daemon-reload
), habilito o novo soquete systemctl enable systemd-journald-dev-log.socket
) e reinicio todas as unidades relacionadas ao journald ( systemctl restart systemd-journald\*
), depois do qual systemctl cat systemd-journald.socket
mostra que as alterações estão ativas:
# systemctl list-units | grep journald
systemd-journald.service loaded active running Journal Service
systemd-journald-dev-log.socket loaded active running Journal Socket (/dev/log)
systemd-journald.socket loaded active running Journal Socket
# systemctl cat systemd-journald.service | grep Socket
Sockets=systemd-journald.socket systemd-journald-dev-log.socket
# systemctl cat systemd-journald.socket | grep Listen
ListenStream=/run/systemd/journal/stdout
ListenDatagram=/run/systemd/journal/socket
# systemctl cat systemd-journald-dev-log.socket | grep Listen
ListenDatagram=/run/systemd/journal/dev-log
Mas, apesar da configuração acima, acho que /dev/log
não é um link simbólico:
# ls -l /dev/log
srw-rw-rw-. 1 root root 0 Sep 12 17:33 /dev/log
E, de fato, ele foi aberto por systemd-journald
diretamente, em vez de por systemd
em si:
# lsof | grep /dev/log
systemd-j 186 root 5u unix 0xffff8b5076bc8000 0t0 157285 /dev/log
O que está acontecendo aqui? Por que a minha unidade de soquete não funciona como esperado? Existe alguma maneira de contornar esse problema que não envolve uma atualização para o systemd?