如何防止服务脚本输出阻塞“消息”

时间:2019-04-27 22:44:27

标签: linux logging service centos7 syslog

我在Centos7上有一项服务,该服务在/usr/local/sbin/restarthelp2.sh中运行脚本,并通过检查网络连接状态来输出隧道检查。该输出的结果以/ var / log / messages结尾,并使文件很大。我已经将输出发送到其自己的日志文件中,如何将脚本/服务的输出结果保留在“消息”文件之外?

[Unit] 
Description=CHECK the wlan

[Service]
Type=simple
ExecStart=/usr/local/sbin/restarthelp2.sh


[Install]
WantedBy=default.target

上述脚本的代码:

#!/bin/bash

while true;
do
    status=$(</sys/class/net/wlan0/operstate)
    tunstate=$(</sys/class/net/tun0/carrier)
    now=$(date)
    if [ $status == up ] && [ $tunstate -eq 1 ];
    then
        echo "everything was good at $now, tunnel status was $tunstate" >> /var/log/wlancheck.log
        echo "tunnel status is UP"
        sleep 10
    fi
done

1 个答案:

答案 0 :(得分:0)

您可以在该行的[Service]部分添加行

StandardOutput=null

,以便此输出不会记录到日志,也不会从那里记录到syslog。 有关其他值,请参见man systemd.exec


如果您使用的是rsyslogd,则可以在邮件放入/var/log/messages之前过滤邮件。删除上面的“单位”行以恢复正常的日志记录。查找类似/etc/rsyslog.conf的文件和类似

的行
*.info;...   /var/log/messages

在此行前面添加一个过滤器,该过滤器将属性与您要禁止的内容进行比较,并使用 action {{1 }},例如:

stop

有大量的rsyslog文档,但是由于仍然支持许多旧格式,因此很难遵循,因此您必须注意不要混淆它们。

如果还将单位if $programname startswith "restarthelp" then stop if $msg contains 'tunnel status is UP' then stop 更改为StandardOutput=null,您将不再获得记录在systemd日志中的消息,它们将直接进入rsyslogd。我不知道这是否会为您提供所需的状态信息。