如何防止服务脚本输出阻塞 "messages"
How to keep service script output from clogging up "messages"
我在 Centos7 上有一个服务,它在 /usr/local/sbin/restarthelp2.sh 中运行一个脚本,并通过检查网络连接的状态来输出隧道检查。其输出以 /var/log/messages 结束,并使文件变得巨大。我已经将输出发送到它自己的日志文件中,如何将 script/service 的输出结果保存在 "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
您可以在单元的 [Service]
部分添加行
StandardOutput=null
这样这个输出就不会记录到日志中,也不会从那里记录到系统日志中。
对于其他值,请参见 man systemd.exec
。
如果您正在使用 rsyslogd
,您可以稍后过滤消息,就在它们被放入 /var/log/messages
之前。删除上面的 Unit 行以恢复正常记录。寻找像 /etc/rsyslog.conf
这样的文件和像
这样的行
*.info;... /var/log/messages
在这一行的前面添加一个 filter 来比较 属性 和你想要抑制的内容,然后使用操作 stop
,例如以下之一:
if $programname startswith "restarthelp" then stop
if $msg contains 'tunnel status is UP' then stop
有大量的 rsyslog 文档,但是很难理解,因为仍然支持许多旧格式,因此您必须小心不要混淆它们。
如果您还将单位 StandardOutput=null
更改为 StandardOutput=syslog
,您将不再在 systemd 日志中记录消息,它们将直接进入 rsyslogd。我不知道这是否会为您提供您想要的状态信息。
我在 Centos7 上有一个服务,它在 /usr/local/sbin/restarthelp2.sh 中运行一个脚本,并通过检查网络连接的状态来输出隧道检查。其输出以 /var/log/messages 结束,并使文件变得巨大。我已经将输出发送到它自己的日志文件中,如何将 script/service 的输出结果保存在 "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
您可以在单元的 [Service]
部分添加行
StandardOutput=null
这样这个输出就不会记录到日志中,也不会从那里记录到系统日志中。
对于其他值,请参见 man systemd.exec
。
如果您正在使用 rsyslogd
,您可以稍后过滤消息,就在它们被放入 /var/log/messages
之前。删除上面的 Unit 行以恢复正常记录。寻找像 /etc/rsyslog.conf
这样的文件和像
*.info;... /var/log/messages
在这一行的前面添加一个 filter 来比较 属性 和你想要抑制的内容,然后使用操作 stop
,例如以下之一:
if $programname startswith "restarthelp" then stop
if $msg contains 'tunnel status is UP' then stop
有大量的 rsyslog 文档,但是很难理解,因为仍然支持许多旧格式,因此您必须小心不要混淆它们。
如果您还将单位 StandardOutput=null
更改为 StandardOutput=syslog
,您将不再在 systemd 日志中记录消息,它们将直接进入 rsyslogd。我不知道这是否会为您提供您想要的状态信息。