如何沉默systemd服务?

我已经创build了以下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)日志中。 有一种方法可以防止这种情况发生? (最好在自己的服务的规范中)

该文档指出,您可以将StandardOutput=StandardError=为任何你想要的。 他们默认的日记,但你可以redirect到任何地方。

控制执行进程的文件描述符1(STDOUT)连接到的位置。 采用inheritnullttyjournalsyslogkmsgjournal+consolesyslog+consolekmsg+consolesocketfd

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

StandardError=是相似的,它是如何inherit的(这也是默认值):

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

所以,你可以这样做:

 [Service] StandardOutput=null StandardError=journal 

但是要记住,你会失去脚本的输出。 更重要的是,如果出现问题并且脚本在标准输出上输出错误而不是标准错误(如许多shell脚本所做的那样),那么您将会丢失这些错误。 当出现问题时,这会造成很多不必要的挫折。

所以,你真的不应该对系统单位做任何事情。 相反,如果您不希望脚本输出成功,请修复脚本。