我想创建一个系统服务,这将引发额外的系统日志实例(我假设rsyslogd,因为这似乎是我的 Xenial 上安装的?)。我希望它监听指定的套接字(无特权)作为“系统日志服务器”,并将所有收到的日志转储到某个文件中。我希望它运行无特权(即以非 root 用户身份)。
假设我创建了新用户logdumper
并输入以下几行:/etc/systemd/[email protected]
[Unit]
Description=Unprivileged syslog server on port %i
[Service]
User=logdumper
Restart=always
ExecStart=/usr/sbin/rsyslogd -n -f /home/logdumper/rsyslogd-port-%i.conf \
-i /home/logdumper/rsyslogd-port-%i.pid
[Install]
WantedBy=multi-user.target
—我应该放什么进去/home/logdumper/rsyslogd-port-%i.conf
?另外,我的 ExecStart 可以吗?
假设我希望它监听端口 9999(因此,%i=9999),并将接收到的数据转储到/home/logdumper/rsyslogd-port-9999.log
。
答案1
因此,看起来下面的方法对我来说是可行的rsyslogd-port-9999.conf
:
$ModLoad imudp
$UDPServerRun 9999
$ModLoad imtcp
$InputTCPServerRun 9999
$ModLoad immark # not sure what's this, but seems popular
$template Template_WithSrcHost,"%timegenerated:::date-rfc3339% %HOSTNAME% %FROMHOST% %syslogtag%%msg:::drop-last-lf%\n"
*.* /home/logdumper/rsyslogd-port-9999.log;Template_WithSrcHost
我基于 构建了此版本man rsyslog.conf
。$template
指令是添加%FROMHOST%
,在我看来,这是一个比 更好的 IP %HOSTNAME%
。