如何使 systemd 服务静默?

如何使 systemd 服务静默?

我创建了以下 systemd 服务:

[Unit]
Description=ISPConfig DC Sync
After=network.target
After=mysql.service
After=nginx.service

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/ispconfig/server/server.sh

[Install]
WantedBy=multi-user.target

(.sh) 命令有一个循环,它返回一条消息,说明它是出错了还是成功了。问题是这个结果会打印在消息 (/var/log/messages) 日志中。有办法防止这种情况发生吗?(最好是在自己的服务的规范中)

答案1

文档您可以将状态设置StandardOutput=StandardError=您想要的任何值。它们默认为日志,但您可以将它们重定向到多个位置中的任意一个。

控制执行进程的文件描述符 1 ( STDOUT) 连接到何处。可采用、inheritnullttyjournalsyslogkmsgjournal+consolesyslog+consolekmsg+consolefile:pathappend:path之一。truncate:pathsocketfd

...

null将标准输出连接到/dev/null,即写入其中的所有内容都将丢失。

StandardError=类似,但有一个重要例外inherit(也是默认情况):

控制执行进程的文件描述符 2 (STDERR) 连接到的位置。可用选项与 的选项相同StandardOutput=,但有一些例外:如果设置为 ,则inherit用于标准输出的文件描述符将重复用于标准错误,而fd对错误流进行操作,并且默认情况下将查找名为 的描述符"stderr"

因此,你可以这样做:

[Service]
StandardOutput=null
StandardError=journal

但请记住,您将丢失脚本的输出;更重要的是,如果出现问题,并且脚本在标准输出上输出错误而不是标准错误(许多 shell 脚本都是这样),您也会丢失它。当出现问题时,这会给您带来很多不必要的挫败感。

因此,您实际上不应该对 systemd 单元执行任何操作。相反,如果您不希望脚本在成功时输出任何内容,请修复该脚本。

相关内容