Puis-je simplement désactiver updatedb?


26

Est-ce updatedbnécessaire du tout? Je n'utilise jamais locateet mes serveurs ont tendance à avoir des dizaines de millions de fichiers, ce qui fait que updateb s'exécute pendant longtemps et consomme les E / S nécessaires à MySQL et / ou à d'autres logiciels.

Puis-je simplement le supprimer de cron et m'attendre à ce que tout fonctionne? (par tout, je veux dire les logiciels habituels trouvés sur le serveur: linux, cpanel, mysql, apache, php etc.).

Réponses:


25

Oui, vous pouvez le désactiver dans les crons ou supprimer le package fourni updatedb. Sur un système Red Hat, vous suivriez les étapes pour déterminer si quelque chose l'exige avant la suppression.

  1. Découvrez d'abord où se trouve le programme sur le disque.

    $ type updatedb
    updatedb is /usr/bin/updatedb
    
  2. Découvrez ensuite ce que le package propose updatedb.

    $ rpm -qf /usr/bin/updatedb
    mlocate-0.26-3.fc19.x86_64
    
  3. Voyez si quelque chose l'exige mlocate.

    $ rpm -q --whatrequires mlocate
    no package requires mlocate
    
  4. Rien ne l'exige donc vous pouvez retirer le paquet.

    $ yum remove mlocate
    

1
rpma également --whatrecommends. Je pense que Fedora a commencé à le considérer comme un concept au cours des deux dernières années. (Longtemps après que le côté debian / ubuntu soit par défaut à installer les dépendances "recommande" ainsi que celles "nécessite").
sourcejedi

donc après la suppression, puis-je supprimer /var/lib/mlocate?
Ramratan Gupta

1
@RamratanGupta - oui
slm

13

Vous pouvez désactiver l'analyse des répertoires contenant de nombreux fichiers ( /var/wwwpar exemple) en modifiant le /etc/updatedb.conffichier de configuration. Si vous voulez vraiment le désactiver, supprimez simplement le cronjob.


5

Supprimez-le à l'aide de votre gestionnaire de packages, si un autre package l'utilise, vous le saurez, car il doit en dépendre (dépendance du package).

J'ai un serveur avec Nginx, php-fpmet mysql, et cela fonctionne à merveille sans updatedb.


De plus, en apt , vous pouvez utiliser aptitude remove, aptitude whyou aptitude search '?installed ?recommends(mlocate)'. Celles-ci montreront toutes les dépendances recommandées, en plus de celles requises. apt installe maintenant les paquets recommandés par défaut, donc bien qu'ils ne soient pas considérés comme essentiels, ils peuvent très bien être utilisés pour fournir des sous-fonctions très utiles.
sourcejedi

0

Je ne vais pas aller trop loin en disant cela, mais il est plus que probable que ce n'est pas mis à jourb qui cause vos problèmes. Probablement autre chose que vous ne voulez pas, soit une application de sauvegarde que vous n'avez pas configurée à votre goût ou un problème de sécurité avec la structure de votre profil / groupe de systèmes.

Un autre cas dans lequel il semblerait que l'allocation de mémoire des systèmes fonctionne contre l'utilisateur est le scénario où l'on «ignore les systèmes de fichiers virtuels empilés». Et c'est booger de problème. Une «bombe virtuelle illogique» pour ainsi dire.

Cela arrive assez souvent aux clés USB formatées en fat32 sur un système ext 4 qui sont ensuite transférées vers des systèmes zfs mal configurés avec le shell csh comme shell de connexion man. Il crée la récursivité virtuelle du problème "Read-File only USB file system" sur le disque et formate / monte le lecteur sur vFat à partir de fat32, ce qui crée à son tour un secteur de blocs défectueux et extrait (déplace virtuellement) un répertoire jusqu'à son niveau des répertoires parents, ce qui provoque la boucle infinie! Le répertoire n'est pas physiquement au niveau de la hiérarchie du parent. La syntaxe des causes csh en est la cause. * REMARQUE: le lecteur est en lecture seule sur tous les systèmes, à l'exception d'un système de connexion zfs c-shell.

Désactiver complètement updatedb pourrait créer une logique erronée en ce qui concerne l'allocation de mémoire et «l'effet de retour en arrière». Si vous avez déjà eu un retour en arrière quand vous ne le vouliez pas, vous savez ce que je veux dire quand deux heures de ligne de commande les scripts sont Fubar-ed parce que vous n'avez pas alloué le traitement de votre travail en mémoire.

Maintenant, si vous avez deux ou plusieurs processeurs physiques (par exemple dual core ou plus) et un ram ddr3, alors ça va. Tant que vous n'exécutez pas de graphiques lourds, auquel cas si cette charge est à l'origine de vos problèmes, updatedb serait le dernier de votre liste. Si vous essayez de masquer vos mouvements vers le système pour une raison quelconque, il existe d'autres moyens de le faire plutôt que de désactiver la mise à jourb, et en fait, la mise à jourb consoliderait vos actions afin que `` rien ne se passe '' en ce qui concerne le déguisement de votre système.

Franchement, basé sur la taille du fichier binaire / usr / bin / updatedb et compte tenu de l'architecture de la communication signal / système avec le système d'exploitation et que Bash est 10 fois la taille d'un tiret de shell lié réciproquement ou de la cendre de l'appel asynchrone. très peu coûteux sur le système.

Si vous êtes connecté au shell exécutant les scripts séquentiels que vous avez écrits et que vous êtes un administrateur (par exemple sudo), exécutez la commande suivante:

~$ sudo bash
:~# ./script.sh

Ensuite, vous voudrez probablement créer une variable locale dans votre script (updatedb a besoin des privilèges système, AKA root / sudo / wheel), par exemple:

#! /bin/sh
# Create local variables
UPD="updatedb"

echo "Beginning Execution of sequence "

Dans ce cas, la séquence utilise STDOUT / STDIN à partir d'autres scripts shell que vous avez écrits et exécutez en tant que variables avec dans votre script principal ou dites que vous avez configuré un package d'administration personnel ou professionnel où vous téléchargez / téléchargez / portez depuis cdrom ou USB ou autre chose, qui est extrêmement volumineux et a des scripts d'installation personnels pour eux, VOUS VOULEZ GARDER à jourb. Lorsque le shell du terminal est ouvert, il s'agit de votre instance d'application principale. D'autres applications peuvent / fonctionnent de manière asynchrone, mais la mise à jourb est l'une des moins coûteuses en termes de demande globale de système / informatique. Plusieurs fois, en particulier avec le lxdm Desk Enviro's et le Lxterm (ce truc est super rapide), mais pas uniquement; sans ajouter de mise à jour à mes scripts, le système m'a tiré des erreurs selon lesquelles les fichiers n'existent pas ou que quelque chose de vicieux s'était produit. Et j'aime QUOI!

Le shell est plus rapide que le système qu'il administre je vous le garantis!

Dans ce cas, vous appelleriez alors la variable updatedb pour verrouiller la séquence précédente en mémoire, comme indiqué

echo "Updating local database "

$UPD

echo "Exiting script two "

exit

Voyez-vous ce que je dis? Si vous posez cette question parce que vous exécutez des tests de vitesse d'exécution, c'est-à-dire le style Andrew Tanenbaum, vous en avez. Sinon, utilisez l'outil à votre avantage.


Le problème avec updatedb n'est pas le CPU ou la mémoire, mais la bande passante d'E / S. Dans mon cas (un système avec un excellent processeur et beaucoup de mémoire à revendre), il tourne mon disque dur à 5 Mo / s pendant des heures, un par un, ralentissant tout le reste qui dépend de ce lecteur. Et quand je sais exactement ce que je cherche, ce sont des fichiers nouveaux, donc ce locaten'est pas utile car je ne peux pas être sûr qu'il est indexé. Lorsque les fichiers sont plus anciens, je vais chercher fzfune recherche floue.
Davidmh

0

Au moins dans ArchLinux, il semble que man-db.timeret updatedb.timersont activés par défaut (ie: les fichiers suivants existent), mais il y en a no installation config (WantedBy, RequiredBy, Also, Alias settings in the [Install] section, and DefaultInstance for template units). This means they are not meant to be enabled using systemctl. [...](sortie de systemctl enable {man-,update}db.timer).

Ce sont les liens symboliques qui sont présents dans le système de fichiers:
/usr/lib/systemd/system/multi-user.target.wants/man-db.timer
/usr/lib/systemd/system/multi-user.target.wants/updatedb.timer

Il faudrait simplement les supprimer.
Cependant, ils seraient recréés à chaque re / installation / mise à niveau man-db, les mlocatepaquets, respectivement.

Pour ArchLinux, une solution de contournement possible consiste à avoir un crochet pour pacman pour les supprimer.
Cependant, cela les supprimerait à chaque événement, même si vous souhaitez qu'ils soient activés lors des mises à niveau.
Vous pouvez, dans ce cas, désactiver le crochet lorsque vous souhaitez activer la minuterie.
Mais, l'activation de la minuterie ne prendrait effet qu'à la réinstallation / mise à niveau du package, car il n'y a pas de section configurée dans les .timerfichiers d'unité par défaut pour directement systemctl enableles temporisateurs.
Un manuel ln -s ../man-db.timer /usr/lib/systemd/system/multi-user.target.wants/man-db.timerou une ln -s ../updatedb.timer /usr/lib/systemd/system/multi-user.target.wants/updatedb.timercommande serait nécessaire pour activer le ou les temporisateurs et supprimer le ou les liens pour les désactiver.

Vous pourriez avoir la priorité sur les unités personnalisées /etc/systemd/system/{man-,update}db.timer, en fournissant WantedBy=multi-user.targetdans la [Install]section pour autoriser systemtl enable|disable, mais les liens /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timerseraient toujours créés lors de la re / installation / mise à niveau, réactivant efficacement le .timers.

Vous pouvez également exécuter systemctl mask man-db.timer updatedb.timerpour masquer les minuteries.
Même s'il était toujours possible d'exécuter manuellement systemctl start man-db.service updatedb.servicepour démarrer les services correspondants, vous ne seriez pas en mesure de démarrer manuellement les temporisateurs, pour une raison quelconque, l'utilisateur se trouverait vouloir / avoir besoin de le faire.
Cette solution de contournement ne permet pas d'avoir des /etc/systemd/system/{man-,update}db.timerfichiers d'unité personnalisés remplaçants présents si vous le souhaitez / si vous en avez besoin, car systemd doit les remplacer par un lien symbolique /dev/nullpour signifier une unité masquée.

Le masquage semble être la solution la moins intrusive.
Je préfère supprimer manuellement /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timeraprès chaque mise à niveau, et avoir des fichiers d'unité prioritaires /etc/systemd/system/{man-,update}db.timerayant une [Install]section avec WantedBy=multi-user.targetpour activer l' systemctlactivation / désactivation manuelle .

Malheureusement, il n'y a pas de solution simple à cela, du moins, je pense, en ce moment.
Cela suppose que les paquets man-db, mlocatesont recherchés / nécessaires pour être installé à demeure dans le système: les enlever ne serait pas une solution souhaitée / utile.

Voir aussi ceci: https://www.reddit.com/r/archlinux/comments/36fqzh/updatedbservice_and_mandbservice_increases_boot/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.