我想systemd-journald在systemd 219(在el7上,所以软件包是systemd-219-30.el7_3.9.x86_64)监听/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行。
我创build了一个新的单元/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
但是,尽pipe有上述configuration,我发现/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?