Estou tentando reiniciar os serviços quando uma determinada saída de texto aparece no status do 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 procurar uma resposta, mas não consegui encontrar uma, agradeço qualquer indicação!
Script atualizado que estou tentando usar:
Obrigado por escrever e explicar. Na primeira vez, ele reinicia o SERVICE repetidamente.
Em seguida, adicionei o sono 30, no entanto, toda vez que o script for executado, ele reiniciará o arquivo de serviço, independentemente da linha que contém o regex desejado.
O script como tal é:
Você faria algo como:
journalctl
obtém a saída do diário do sistema.-f
usa o modo follow, para que o comando fique lá e forneça novas entradas de diário.-n 0
diz para não fornecer nenhuma das entradas de diário anteriores.A saída é canalizada para
while read line
. Isso lê infinitamente a partir do fluxo de saída dejournalctl
, colocando cada linha na variável do shellline
.=~
é o operador de expressão regular do Bash . Aqui ele apenas verifica se a linha contémplexdrive
e em algum lugar depois dissoCould not update/save object
. Se a expressão regular indicadaregex
corresponder, ela executa a linhasystemctl restart PLEX_SERVICE
ele é uma versão ligeiramente melhorada do script acima, que eu cultuei de carga para pegar um erro JVM OOM. Validado com shellcheck.