Как сохранить вывод служебного скрипта от засорения "сообщений" - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть служба на Centos7, которая запускает сценарий в /usr/local/sbin/restarthelp2.sh и выводит проверку туннеля, проверяя состояние сетевого подключения.Вывод этого заканчивается в / var / log / messages и делает файл огромным.У меня уже есть выходные данные, отправляемые в его собственный файл журнала. Как сохранить результаты вывода из сценария / службы в файл «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 голосов
/ 28 апреля 2019

Вы можете добавить в свой [Service] раздел устройства строку

StandardOutput=null

, чтобы этот вывод не записывался в журнал, а оттуда в системный журнал.Другие значения см. man systemd.exec.


. Если вы используете rsyslogd, вы можете фильтровать сообщения намного позже, непосредственно перед тем, как они будут вставлены в /var/log/messages.Удалите указанную выше строку Unit, чтобы вернуться к нормальной регистрации.Найдите файл типа /etc/rsyslog.conf и строку типа

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

Добавьте перед этой строкой фильтр , который сравнивает свойство с тем, что вы хотитеподавить и использовать действие stop, например, одно из:

if $programname startswith "restarthelp" then stop
if $msg contains 'tunnel status is UP' then stop

Существует обширная документация rsyslog , но ее трудно выполнить, так какМногие старые форматы все еще поддерживаются, поэтому вы должны быть осторожны, чтобы не перепутать их.

Если вы также измените Unit StandardOutput=null на StandardOutput=syslog, вы больше не будете получать сообщения, зарегистрированные вжурнал systemd, и они сразу перейдут к rsyslogd.Я не знаю, предоставит ли это вам информацию о статусе, которую вы хотели.

...