AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1490220
Accepted
thatjackelliott
thatjackelliott
Asked: 2023-10-24 21:45:10 +0800 CST2023-10-24 21:45:10 +0800 CST 2023-10-24 21:45:10 +0800 CST

Este script simples consumiu muita CPU, por quê?

  • 772

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".

scripts
  • 1 1 respostas
  • 4116 Views

1 respostas

  • Voted
  1. Best Answer
    FedKad
    2023-10-24T22:38:59+08:002023-10-24T22:38:59+08:00

    Por favor, altere seu script para algo como:

    #!/bin/bash
    journalctl --follow | grep --line-buffered -i bug | while read -r ; do
      mutt -s "ALERT - AirchainPC may be in TROUBLE" -- '[email protected]' < bug_issued_by_journalctl.txt
    done
    

    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-bufferedopção) no whileloop. O readcomando consumirá cada linha e retornará, para que o corpo da whileinstruçã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 à journalctlsaída de '. Nesse caso, substitua read -re read -r msguse o conteúdo da $msgvariá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 --followopção no journalctlcomando, este script nunca retornará. Se quiser, você pode enviar o script para background assim:

    #!/bin/bash
    
    check_bug () {
      journalctl --follow | grep --line-buffered -i bug | while read -r ; do
        mutt -s "ALERT - AirchainPC may be in TROUBLE" -- '[email protected]'
      done
    }
    
    check_bug &>/dev/null &
    

    Um conselho simples: sempre teste interativamente antes de colocar algo em segundo plano! Durante o teste, você também desejará substituir o &>/dev/nullna ú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

    journalctl --follow | grep --line-buffered -i bug
    

    com

    journalctl --follow --grep=bug
    

    Você deve ler man journalctla página, para diferenciar maiúsculas de minúsculas e outros detalhes.

    • 15

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve