Est-ce updatedb
nécessaire du tout? Je n'utilise jamais locate
et 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.).
rpm
a é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")./var/lib/mlocate
?Vous pouvez désactiver l'analyse des répertoires contenant de nombreux fichiers (
/var/www
par exemple) en modifiant le/etc/updatedb.conf
fichier de configuration. Si vous voulez vraiment le désactiver, supprimez simplement le cronjob.la source
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-fpm
etmysql
, et cela fonctionne à merveille sansupdatedb
.la source
aptitude remove
,aptitude why
ouaptitude 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.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:
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:
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é
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.
la source
locate
n'est pas utile car je ne peux pas être sûr qu'il est indexé. Lorsque les fichiers sont plus anciens, je vais chercherfzf
une recherche floue.Au moins dans ArchLinux, il semble que
man-db.timer
etupdatedb.timer
sont activés par défaut (ie: les fichiers suivants existent), mais il y en ano 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 desystemctl 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
, lesmlocate
paquets, 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
.timer
fichiers d'unité par défaut pour directementsystemctl enable
les temporisateurs.Un manuel
ln -s ../man-db.timer /usr/lib/systemd/system/multi-user.target.wants/man-db.timer
ou uneln -s ../updatedb.timer /usr/lib/systemd/system/multi-user.target.wants/updatedb.timer
commande 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 fournissantWantedBy=multi-user.target
dans la[Install]
section pour autorisersystemtl enable|disable
, mais les liens/usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timer
seraient toujours créés lors de la re / installation / mise à niveau, réactivant efficacement le.timer
s.Vous pouvez également exécuter
systemctl mask man-db.timer updatedb.timer
pour masquer les minuteries.Même s'il était toujours possible d'exécuter manuellement
systemctl start man-db.service updatedb.service
pour 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.timer
fichiers 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/null
pour 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.timer
après chaque mise à niveau, et avoir des fichiers d'unité prioritaires/etc/systemd/system/{man-,update}db.timer
ayant une[Install]
section avecWantedBy=multi-user.target
pour activer l'systemctl
activation / 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
,mlocate
sont 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/
la source