Reiniciando o serviço baseado em palavras-chave de saída de log

0

Estou tentando reiniciar os serviços quando uma determinada saída de texto aparece no status systemctl ou em um arquivo de log.

A linha completa neste exemplo é:

Aug 27 01:05:16 SSD plexdrive410[1321]: [USR/LOCAL/BIN/PLEXDRIVE410] [2018-08-27 01:05] WARNING: Could not update/save object 4PASA4U3Gj8mTvllAAIgEqHdMFHER3q (screens.jpg)

As palavras-chave sempre conterão

WARNING: Could not update/save object

Eu tentei pesquisar uma resposta, mas não consegui encontrar nenhuma, agradeço qualquer indicação!

Script atualizado que estou tentando usar:

Obrigado pela redação e explicação. A primeira vez que reiniciar o SERVICE repetidamente.

Em seguida, adicionei o sleep 30, mas cada vez que o script é executado, ele reinicia o arquivo de serviço, independentemente da linha que contém o regex desejado.

O script como tal é:

link

    
por askef 27.08.2018 / 01:17

1 resposta

1

Você faria algo como:

#!/bin/bash

regex="plexdrive.*Could not update\/save object"

journalctl -f -n 0 |
while read line
do
    if [[ "$line" =~ $regexp ]]; then
        systemctl restart PLEX_SERVICE
    fi
done

journalctl fornece a saída do diário do sistema. -f usa o modo de acompanhamento, para que o comando fique lá e forneça novas entradas de diário. -n 0 diz para não dar a você nenhum dos lançamentos anteriores.

A saída é canalizada para while read line . Isso lê infinitamente a partir do fluxo de saída de journalctl , colocando cada linha na variável de shell line .

=~ é o operador expressão regular do Bash. Aqui, apenas verifica se a linha contém plexdrive e em algum lugar depois disso Could not update/save object . Se a expressão regular corresponder, então a linha systemctl restart PLEX_SERVICE

será executada     
por 27.08.2018 / 02:14

Tags