Obtendo systemd-journald (219) para escutar em algum lugar diferente de / dev / log

1

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?

    
por larsks 12.09.2017 / 19:36

0 respostas