GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter une commande une fois qu'un nettoyage ZFS * est terminé * ?

Solution 1 :

Sur ZFS Sous Linux, à partir de la version 0.6.3 cela peut être géré de manière assez élégante en utilisant le démon d'événement ZFS (zed). Le démon d'événement, en vertu de la surveillance directe des événements du noyau, peut réagir presque immédiatement à tout événement qui se produit et ne dépend pas de l'interrogation et de l'analyse continues de la sortie d'une autre commande.

Créez un script shell avec n'importe quel nom de fichier commençant par /etc/zfs/zed.d/scrub.finish (par exemple, scrub.finish-custom.sh ). Ce script peut prendre n'importe quelle action appropriée, comme envoyer un e-mail, écrire une entrée de journal quelque part ou faire chanter et danser le système (OK, peut-être pas ça). Des exemples sont fournis qui peuvent fournir un point de départ.

Si tout ce que vous voulez est de recevoir un e-mail lorsque le nettoyage est terminé, le scrub.finish-email.sh fourni le script le fera bien. Modifiez simplement /etc/zfs/zed.d/zed.rc pour indiquer où l'e-mail doit être envoyé et si un e-mail doit également être envoyé si le pool ne rencontre aucun problème, assurez-vous que quelque chose nommé scrub.finish suivi de quoi que ce soit dans /etc/zfs/zed.d y mène, et assurez-vous que zed est démarré au démarrage.

Solution 2 :

J'utilise ce script simple pour nettoyer les rapports d'état par e-mail.

  • zpadmin

Si vous avez besoin de détecter une transition depuis scrub running à scrub finished Je vérifierais le state champ de zpool status production. Quelque chose comme ça :

# 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

Solution 3 :

Bien que cette question soit spécifique à Linux, il s'agit du premier résultat Google lors de la recherche de "attendre que le nettoyage soit terminé" , donc j'aimerais ajouter quelques informations utiles pour les personnes exécutant OpenSolaris (testé sur OmniOS, mais SmartOS, illumos, etc. devraient être similaires) au lieu de Linux (Solaris normal devrait également fonctionner, mais je ne l'ai pas testé là-bas).

Vous pouvez utiliser syseventadm pour enregistrer les événements du noyau. La liste complète se trouve dans /usr/include/sys/sysevent/eventdefs.h (recherchez simplement "ZFS" dans ce fichier). Après avoir ajouté des événements, le service doit être redémarré, par exemple :

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

De cette façon, le script sera lancé à la fin du nettoyage de n'importe quel pool - vous devez vérifier à l'intérieur du script si $1 correspond au nom de pool souhaité. Pourtant, c'est beaucoup moins de frais généraux que l'interrogation.

Solution 4 :

J'ai eu beaucoup de succès avec zfswatcher


Linux
  1. Comment exécuter une commande unique sur plusieurs systèmes distants à la fois

  2. Comment exécuter une commande stockée dans une variable ?

  3. Comment exécuter une commande en tant qu'administrateur système (racine) ?

  4. Comment exécuter la commande Vim depuis le shell ?

  5. Comment puis-je exécuter une commande après le démarrage ?

Comment exécuter la commande Sudo sans mot de passe

Comment exécuter des commandes Linux en arrière-plan

Comment exécuter une commande pendant une durée spécifique sous Linux

Comment configurer ZFS sur Ubuntu 20.04

Comment exécuter une commande périodiquement sous Linux à l'aide de Watch

Comment exécuter plusieurs commandes Linux à la fois dans le terminal Linux