GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu vytvořit nekonečnou smyčku, která zabije proces, pokud je něco nalezeno v dmesg?

Některé problémy:

  • Probíháte v rušné smyčce, která spotřebuje tolik zdrojů, kolik jen může. Toto je jeden případ, kdy sleep by mohla být oprávněná.
  • Nejnovější verze dmesg mít příznak pro sledování výstupu, takže byste mohli celou věc přepsat jako (netestováno)

    while true
    do
        dmesg --follow | tail --follow --lines=0 | grep --quiet 'BUG: workqueue lockup'
        killall someprocessname
    done
    
  • Kód by měl být odsazen, aby byl čitelný.
  • Je to opravdu zvláštní, ale [ je stejný jako test - viz help [ .

Varianta odpovědi @l0b0:

dmesg --follow | awk '
   /BUG: workqueue lockup/  { system ("killall someprocessname") ; rem="done at each occurrence. You could add further things, like print to a logfile, etc.,"
        }'

Toto pojďme awk udělat smyčkování, které má některé výhody:

  • bude fungovat, dokud tento proces neukončí.
  • Také nevolá více než 1 killall na výskyt vyhledávacího řetězce „BUG:workqueue lockup“, který vylepšuje druhou odpověď.

Test:Můžete to vložit do skriptu s názvem thescript a proveďte nohup thescript & , takže thescript bude pokračovat i po ukončení relace.

Jakmile budete spokojeni, že to funguje, zabijte ho a pak můžete (místo spouštění pokaždé v shellu s nohup ) převést jej na daemon script které pak můžete spustit ve vaší aktuální úrovni běhu.

tj.:pomocí jiného skriptu jako modelu (musíte mít alespoň sekce start, stop a status), můžete upravit thescript vhodně a poté jej umístěte do /etc/rc.d/init.d a mít na něj symbolický odkaz s názvem Sxxthescript pod příslušným(i) /etc/rc.d/rcN , N je to číslo pro vaši normální úroveň běhu (viz horní řádky who -a znát aktuální úroveň běhu). A mít odpovídající Kxxthescript také symbolické odkazy, v každém (nebo téměř ve všech) úrovních běhu, takže skript je při přepínání úrovní běhu náležitě zabit.

Nebo udělejte „příslušné věci“, abyste jej spustili/zastavili prostřednictvím systemd nebo jiného ekvivalentního systému, který vaše distribuce používá.


Linux
  1. Jak mohu programově vytvořit novou úlohu cron?

  2. Jak vytvořím crontab pomocí skriptu

  3. Jak mohu v prostředí Linux zpracovat každý řádek víceřádkového řetězce?

  1. Jak mohu vytvořit soubor v každé složce?

  2. Jak mohu připojit obraz disku?

  3. Jak mohu vytvořit soubor výpisu běžícího procesu v Linuxu?

  1. Jak vytvořit dočasný soubor ve skriptu Shell?

  2. Co jsou Shell Scripts? Jak vytvořit Shell skripty?

  3. Jak mohu zapisovat do dmesg z příkazového řádku?