Назад | Перейти на главную страницу

Получение systemd-journald (219) для прослушивания где-нибудь, кроме / dev / log

Я хотел бы, чтобы systemd-journald в systemd 219 (на el7, поэтому пакет - systemd-219-30.el7_3.9.x86_64) прослушивал сообщения syslog на /run/systemd/journal/dev-log, и имеют /dev/log быть символическая ссылка в этот файл. Это поведение по умолчанию для более поздних версий systemd-journald.

Акция /lib/systemd/system/sytemd-journald.socket выглядит так:

[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

Я изменяю этот файл, чтобы удалить ListenDatagram=/dev/log линия.

Я создал новый юнит, /etc/systemd/system/systemd-journal-dev-log.socket это выглядит так:

[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

Я модифицировал /lib/systemd/system/systemd-journald.service так что он включает:

Sockets=systemd-journald.socket systemd-journald-dev-log.socket

Я перезагружаю systemd (systemctl daemon-reload), включите новый сокет systemctl enable systemd-journald-dev-log.socket) и перезапустите все связанные с журналом модули (systemctl restart systemd-journald\*), после которого systemctl cat systemd-journald.socket показывает, что изменения активны:

# 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

Но, несмотря на приведенную выше конфигурацию, я считаю, что /dev/log не является символической ссылкой:

# ls -l /dev/log
srw-rw-rw-. 1 root root 0 Sep 12 17:33 /dev/log

И на самом деле его открыли systemd-journald напрямую, а не systemd сам:

# lsof | grep /dev/log
systemd-j 186     root    5u     unix 0xffff8b5076bc8000      0t0    157285 /dev/log

Что тут происходит? Почему моя розетка не работает должным образом? Есть ли способ обойти эту проблему, не требующий обновления до systemd?