Logrotate - перезапустить службу, только если она была запущена

У меня есть HA-кластер с samba, запущенным на активном узле, теперь я получаю эти ошибки в моем корневом почтовом ящике:

Can't find pid for destination 'smbd'
error: error running non-shared postrotate script for /var/log/samba/log.smbd of '/var/log/samba/log.smbd '
Can't find pid for destination 'nmbd'
error: error running non-shared postrotate script for /var/log/samba/log.nmbd of '/var/log/samba/log.nmbd '
run-parts: /etc/cron.daily/logrotate exited with return code 1

Могу ли я сделать Logrotate перезапускать службу, только если она была запущена?

В соответствии с запросом конфигурации logrotate smane

/var/log/samba/log.smbd {
        weekly
        missingok
        rotate 7
        postrotate
                [ ! -x /usr/bin/smbcontrol ] || /usr/bin/smbcontrol smbd reload-config
        endscript
        compress
        delaycompress
        notifempty
}

/var/log/samba/log.nmbd {
        weekly
        missingok
        rotate 7
        postrotate
                [ ! -x /usr/bin/smbcontrol ] || /usr/bin/smbcontrol nmbd reload-config
        endscript
        compress
        delaycompress
        notifempty
}

/var/log/samba/log.samba {
        weekly
        missingok
        rotate 7
        postrotate
                if [ -d /run/systemd/system ] && command systemctl >/dev/null 2>&1 && systemctl is-active --quiet samba-ad-dc; then
                        systemctl kill --kill-who all --signal=SIGHUP samba-ad-dc
                elif [ -f /var/run/samba/samba.pid ]; then
                        # This only sends to main pid, See #803924
                        kill -HUP `cat /var/run/samba/samba.pid`
                fi
        endscript
        compress
        delaycompress
        notifempty
}
0
задан 4 May 2020 в 23:20
1 ответ

Теперь, основываясь на вашей конфигурации logrotate, я могу понять, откуда берутся эти ошибки. Они взяты из инструмента smbcontrol, который возвращает код ошибки, если не может найти PID smbd/nbmd.

Вот простое решение для игнорирования этих ошибок в сценариях ротации журналов: добавьте || true после строк /usr/bin/smbcontrol [sn]mbd reload-config. т.е. первая часть должна выглядеть так

postrotate [ ! -x /usr/bin/smbcontrol ] || /usr/bin/smbcontrol smbd reload-config || истинный эндскрипт

0
ответ дан 5 May 2020 в 12:17

Теги

Похожие вопросы