如何启动 systemd 单元文件(someservice.service)并将日志设置为 /dev/null?

如何启动 systemd 单元文件(someservice.service)并将日志设置为 /dev/null?

有没有办法使用 systemd 启动服务并将其日志记录到 /dev/null,而不在单元文件中包含适当的行。

例如,将 StandardOutput 和 StandardErorr 指令设置为 null 的文件将把日志发送到 /dev/null。

[Unit]
Description=MyService
[Service]

ExecStart=/usr/bin/start_myservice.sh 
Restart=always
StandardOutput=null
StandardError=inherit

[X-Fleet]
Global=true

可以使用以下命令启动此服务

systemctl start MyService.service

我的问题是,是否有办法启动未设置 StandardOutput 和 StandardError 指令的服务,并强制其日志转到 /dev/null。也许可以使用类似这样的命令

systemctl start OtherService.service --disable-logging

答案1

您可以使用插件覆盖单元中的任何内容,如果包含目录存在,systemd 会自动从其中读取文件。

例如,如果您创建一个目录/etc/systemd/system/myservice.service.d,然后在该目录中创建一个文件,则该文件中的指令将覆盖系统附带的单元中的任何内容。

例如,/etc/systemd/system/myservice.service.d/logging.conf

[Service]
StandardOutput=null

(但请注意,如果创建目录并将其留空,服务将被屏蔽并且无法启动!)

每当您请求服务状态时,也会显示插件的使用情况。例如:

# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/libvirtd.service.d
           └─zfs.conf
   Active: active (running) since Mon 2016-04-04 21:40:09 EDT; 3 days ago

请记住systemctl daemon-reload在创建或编辑插件后。

相关内容