GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo ejecutar un comando una vez que se *completa* un borrado ZFS?

Solución 1:

En ZFS En Linux, a partir de versión 0.6.3 esto se puede manejar de manera bastante elegante usando el demonio de eventos ZFS (zed). El demonio de eventos, en virtud de monitorear los eventos del núcleo directamente, puede reaccionar casi inmediatamente a cualquier evento que ocurra y no depende del sondeo y análisis continuos de la salida de algún otro comando.

Cree un script de shell con cualquier nombre de archivo que comience con /etc/zfs/zed.d/scrub.finish (por ejemplo, scrub.finish-custom.sh ). Ese script puede tomar cualquier acción apropiada, como enviar un correo electrónico, escribir una entrada de registro en algún lugar o hacer que el sistema cante y baile (bueno, tal vez no sea eso). Se proporcionan ejemplos que pueden proporcionar un punto de partida.

Si todo lo que desea es recibir un correo electrónico cuando se complete la limpieza, el scrub.finish-email.sh proporcionado script hará eso muy bien. Simplemente edite /etc/zfs/zed.d/zed.rc para indicar a dónde se debe enviar el correo electrónico y si se debe enviar un correo electrónico también si el grupo no experimenta ningún problema, asegúrese de que algo se llame scrub.finish seguido de cualquier cosa en /etc/zfs/zed.d conduce a él, y asegúrese de que zed se inicie en el arranque.

Solución 2:

Utilizo este sencillo script para borrar los informes de estado por correo electrónico.

  • zpadmin

Si necesita detectar la transición desde scrub running a scrub finished Verificaría el state campo de zpool status producción. Algo como esto:

# 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

Solución 3:

Aunque esta pregunta es específica de Linux, es el primer resultado de Google al buscar "esperar hasta que finalice la limpieza" , por lo tanto, me gustaría agregar información útil para las personas que ejecutan OpenSolaris (lo probé en OmniOS, pero SmartOS, illumos, etc. deberían ser similares) en lugar de Linux (Solaris normal también debería funcionar, pero no lo probé allí).

Puedes usar syseventadm para registrar eventos del núcleo. La lista completa se puede encontrar en /usr/include/sys/sysevent/eventdefs.h (simplemente busque "ZFS" en este archivo). Después de agregar eventos, el servicio debe reiniciarse, por ejemplo:

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

De esta manera, la secuencia de comandos se iniciará cuando finalice la limpieza de cualquier grupo; debe verificar dentro de la secuencia de comandos si $1 es igual a su nombre de grupo deseado. Aún así, es mucho menos sobrecarga que el sondeo.

Solución 4:

He tenido mucho éxito con zfswatcher


Linux
  1. Cómo ejecutar un solo comando en múltiples sistemas remotos a la vez

  2. ¿Cómo ejecutamos un comando almacenado en una variable?

  3. ¿Cómo ejecutar un comando como administrador del sistema (raíz)?

  4. ¿Cómo ejecutar un comando sin propiedades raíz?

  5. Cómo cambiar el nombre de varios archivos a la vez en Linux

Cómo ejecutar el comando Sudo sin contraseña

Cómo ejecutar comandos de Linux en segundo plano

Cómo ejecutar un comando durante un tiempo específico en Linux

Cómo configurar ZFS en Ubuntu 20.04

Cómo ejecutar un comando periódicamente en Linux usando Watch

Cómo ejecutar varios comandos de Linux a la vez en la terminal de Linux