![如何启动 systemd 单元文件(someservice.service)并将日志设置为 /dev/null?](https://linux22.com/image/680387/%E5%A6%82%E4%BD%95%E5%90%AF%E5%8A%A8%20systemd%20%E5%8D%95%E5%85%83%E6%96%87%E4%BB%B6%EF%BC%88someservice.service%EF%BC%89%E5%B9%B6%E5%B0%86%E6%97%A5%E5%BF%97%E8%AE%BE%E7%BD%AE%E4%B8%BA%20%2Fdev%2Fnull%EF%BC%9F.png)
有没有办法使用 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
在创建或编辑插件后。