Tenho uma máquina remota que preciso ficar de olho. Está executando o Ubuntu Studio 22.04 (KDE Plasma). Algumas semanas atrás, ele travou e o Journalctl mostrou um “Bug” que ocorreu alguns minutos antes da falha. Então escrevi um script simples que segue o journalctl e se aparecer a palavra "Bug" ele envia um email de aviso. Eu configurei esse script para execução há cerca de 10 dias. Ontem, conectei-me remotamente à máquina e verifiquei o htop e descobri que o script estava usando mais de 90% da CPU. Eu o matei e o uso da CPU voltou ao normal. Aqui está o roteiro:
#!/bin/bash
#####################
# THIS SCRIPT LAUNCHED AT STARTUP, CHECKS journalctl for string "Bug"
######################
while true; do
nohup journalctl --follow | grep -i -q "bug" && mutt -s "ALERT - AirchainPC may be in TROUBLE" -- [email protected] < bug_issued_by_journalctl.txt &>/dev/null &
done
Há algo que possa explicar o alto uso da CPU? Aliás, acho que não preciso desse "nohup".
Por favor, altere seu script para algo como:
Aqui, você está acompanhando o diário tentando capturar linhas que contenham a string "bug". Se a string for correspondida, ela será retornada imediatamente
grep
( graças à--line-buffered
opção) nowhile
loop. Oread
comando consumirá cada linha e retornará, para que o corpo dawhile
instrução seja executado naquele momento.Não sei qual
bug_issued_by_journalctl.txt
é o conteúdo do arquivo, mas preferiria algo criado dinamicamente e contendo (parte da) a string correspondente àjournalctl
saída de '. Nesse caso, substituaread -r
eread -r msg
use o conteúdo da$msg
variável no texto do email. Além disso, se o script for executado por outro usuário e/ou de outro diretório, o caminho completo do arquivo mencionado acima deverá ser usado.Por causa da
--follow
opção nojournalctl
comando, este script nunca retornará. Se quiser, você pode enviar o script para background assim:Um conselho simples: sempre teste interativamente antes de colocar algo em segundo plano! Durante o teste, você também desejará substituir o
&>/dev/null
na última linha por algo como&>/tmp/check_bug.out
.Atualização: como sugerido por @G.Sliepen, você pode substituir a sequência de comandos de
com
Você deve ler
man journalctl
a página, para diferenciar maiúsculas de minúsculas e outros detalhes.