GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire un comando una volta che uno scrub ZFS * è stato completato *?

Soluzione 1:

Su ZFS Su Linux, a partire dalla versione 0.6.3 questo può essere gestito in modo abbastanza elegante utilizzando il ZFS Event Daemon (zed). Il demone degli eventi, in virtù del monitoraggio diretto degli eventi del kernel, può reagire quasi immediatamente a qualsiasi evento che si verifica e non dipende dal polling continuo e dall'analisi dell'output di qualche altro comando.

Crea uno script di shell con qualsiasi nome di file che inizi con /etc/zfs/zed.d/scrub.finish (ad esempio, scrub.finish-custom.sh ). Quello script può intraprendere qualsiasi azione appropriata, come inviare un'e-mail, scrivere una voce di registro da qualche parte o far cantare e ballare il sistema (OK, forse non quello). Vengono forniti esempi che possono fornire un punto di partenza.

Se tutto ciò che desideri è ricevere un'e-mail al termine dello scrub, il scrub.finish-email.sh fornito script lo farà bene. Semplicemente modifica /etc/zfs/zed.d/zed.rc per indicare dove deve essere inviata l'email e se deve essere inviata un'email anche se il pool non ha problemi, assicurati qualcosa chiamato scrub.finish seguito da qualsiasi cosa in /etc/zfs/zed.d porti ad esso, e assicurati che zed sia avviato all'avvio.

Soluzione 2:

Uso questo semplice script per ripulire i rapporti sullo stato via e-mail.

  • zpadmin

Se devi rilevare la transizione da scrub running a scrub finished Controllerei il state campo di zpool status produzione. Qualcosa del genere:

# start scrubbing 
zpool scrub ZPOOL

# wait till scrub is finished
while zpool status ZPOOL | grep 'scan:  *scrub in progress' > /dev/null; do
   echo -n '.'
   sleep 10
done

# send a report
zpool status | mail -s "zpool status: ZPOOL" RECIPIENT

Soluzione 3:

Sebbene questa domanda sia specifica di Linux, è il primo risultato di Google quando si cerca "aspetta fino al termine dello scrub" , quindi vorrei aggiungere alcune informazioni utili per le persone che eseguono OpenSolaris (testato su OmniOS, ma SmartOS, illumos ecc. dovrebbero essere simili) invece di Linux (anche il normale Solaris dovrebbe funzionare, ma non l'ho testato lì).

Puoi usare syseventadm per registrare gli eventi del kernel. L'elenco completo può essere trovato in /usr/include/sys/sysevent/eventdefs.h (basta cercare "ZFS" in questo file). Dopo aver aggiunto gli eventi, il servizio deve essere riavviato, ad esempio:

syseventadm add -c EC_zfs -s ESC_ZFS_scrub_finish /path/to/script.sh \$pool_name
syseventadm restart

In questo modo, lo script verrà avviato al termine dello scrubbing di qualsiasi pool:devi controllare all'interno dello script se $1 corrisponde al nome del pool desiderato. Tuttavia, è molto meno sovraccarico rispetto al polling.

Soluzione 4:

Ho avuto molto successo con zfswatcher


Linux
  1. Come eseguire un comando memorizzato in una variabile?

  2. Come rinominare più file contemporaneamente in Linux

  3. Come configurare il filesystem ZFS su Linux con esempi di comandi zpool

  4. Come eseguire il comando Vim dalla shell?

  5. Come posso eseguire un comando dopo l'avvio?

Come eseguire il comando Sudo senza password

Come eseguire i comandi Linux in background

Come eseguire un comando per un tempo specifico in Linux

Come configurare ZFS su Ubuntu 20.04

Come eseguire periodicamente un comando in Linux usando Watch

Come eseguire più comandi Linux contemporaneamente nel terminale Linux