Я хотел бы, чтобы 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?