2 votes

Comment puis-je résoudre les problèmes lorsque la base de données de localisation n'est pas construite sur macOS?

Je lutte pour avoir une base de données locate construite sur mon Mac pour indexer tous les fichiers sous /opt.

$ locate locate

ATTENTION : la base de données locate (/var/db/locate.database) n'existe pas.
Pour créer la base de données, exécutez la commande suivante :

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Veuillez noter que la base de données peut prendre du temps à générer ; une fois
la base de données créée, ce message n'apparaîtra plus.

Suite à la sortie de la commande locate, pour activer la commande locate sur un Mac, j'ai fait :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

mais il retourne immédiatement, au lieu de "prendre du temps", et ls -l /var/db/locate.database donne Aucun fichier ou dossier de ce type.

less /System/Library/LaunchDaemons/com.apple.locate.plist montre :

        Label
        com.apple.locate
        Disabled

Ma compréhension est que cela devrait activer le processus :

sudo launchctl enable system/com.apple.locate.plist, mais je vois toujours qu'il est désactivé ensuite :

$ head /System/Library/LaunchDaemons/com.apple.locate.plist

    Label
    com.apple.locate
    Disabled

    ProgramArguments

J'ai lancé sudo launchctl start com.apple.locate ce matin, il y a plus de 7 heures, mais jusqu'à présent, cela m'indique toujours : ls: /var/db/locate.database: Aucun fichier ou dossier de ce type

Lorsque j'ai tenté d'obtenir des informations sur son statut --

$ sudo launchctl list com.apple.locate
{
    "LimitLoadToSessionType" = "System";
    "Label" = "com.apple.locate";
    "OnDemand" = true;
    "LastExitStatus" = 256;
    "Program" = "/usr/libexec/locate.updatedb";
    "ProgramArguments" = (
        "/usr/libexec/locate.updatedb";
    );
};

Ce LastExitStatus" = 256 semble indiquer un problème. Comme mentionné précédemment, j'ai également essayé d'exécuter la commande sudo /usr/libexec/locate.updatedb, mais cela fait des heures que cela tourne, et je continue d'obtenir : ls: /var/db/locate.database: Aucun fichier ou dossier de ce type

Version de macOS :

$ sw_vers
ProductName:        macOS
ProductVersion:     14.2.1
BuildVersion:       23C71

Puis-je générer un index pour opt et éviter de chercher pourquoi le locate du système ne génère pas de résultat en heures ?

1voto

Oskar Points 1242

Je commencerais par redémarrer et ouvrir deux fenêtres - une pour le Moniteur d'activité et une autre pour une deuxième shell pour vérifier les choses pendant que vous activez l'outil et vérifiez qu'il démarre.

Exécutez la commande ci-dessous pour ignorer le déclenchement du démon de lancement, car vous perdrez toute sortie ou erreurs...

me@m2 /tmp % sudo -s
Mot de passe :
root@m2 tmp # time /usr/libexec/locate.updatedb 
/usr/libexec/locate.updatedb  11.35s user 18.40s system 51% cpu 57.899 total

Sur mon M2 Air, la base de données a été initialement construite en environ 3 minutes, donc vous devriez pouvoir voir les choses commencer sauf si elle s'interrompt immédiatement. Si vous ne rencontrez aucune erreur ci-dessus, essayons de modifier votre fichier /etc/locate.rc pour décommenter SEARCHPATHS et le définir sur juste /opt (ou même plus étroit, un dossier spécifique plus profondément dans opt que vous voulez tester).


Quelques notes pour de futures investigations :

sudo launchctl load -w devrait toujours s'exécuter immédiatement - il bascule une transaction de base de données, qu'un autre processus launchd surveille puis déclenche les actions si nécessaire. Dans votre cas, il appelle immédiatement /bin/sh /usr/libexec/locate.updatedb et vous pouvez utiliser ps pour le voir sur mon Mac...

me@m2 ~ % ps -ef|grep locate
  501 21617     1   0 28Dec23 ??         0:40.53 /usr/libexec/findmylocateagent
    0 34234     1   0  2:45PM ??         0:00.02 /bin/sh /usr/libexec/locate.updatedb
    0 34240 34234   0  2:45PM ??         0:00.02 su -fm nobody -c /usr/libexec/locate.updatedb
   -2 34241 34240   0  2:45PM ??         0:00.01 /bin/sh /usr/libexec/locate.updatedb
   -2 34246 34241   0  2:45PM ??         0:00.01 /bin/sh /usr/libexec/locate.mklocatedb -presort
   -2 34248 34246   0  2:45PM ??         0:00.11 locate.code /tmp/locatewJUgmcwwtV/mklocateVIzEJK1vjC/_mklocatedb34246.bigrams
  501 34251 34223   0  2:45PM ttys002    0:00.00 grep locate

Les premiers et derniers éléments ne sont pas liés à la commande launchctl load - le reste sont tous des processus qui créent le fichier de base de données pour vous. Exécutez la commande ps avant de demander une exécution pour vérifier qu'aucune autre correspondance n'est présente sur votre système.

Le programme updatedb est un script shell, donc vous pouvez l'examiner et voir comment il s'exécute - en changeant à l'utilisateur nobody pour créer un répertoire temporaire (c'est pourquoi vous ne voyez pas la construction de la base de données - elle est déplacée en place si tout se passe bien dans le processus).

me@m2 /tmp % sudo -s
Mot de passe :
root@m2 tmp # time /usr/libexec/locate.updatedb 
/usr/libexec/locate.updatedb  5.27s user 9.66s system 77% cpu 19.158 total

Les reconstructions ultérieures de la base de données prennent moins de 30 secondes puisque mon Mac dans ce cas est sinon inactif et le système met en cache suffisamment de données du système de fichiers pour rendre les choses rapides.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X