2 votos

¿Cómo puedo solucionar problemas cuando la base de datos de ubicación no se construye en macOS?

Estoy teniendo dificultades para tener una base de datos locate construida en mi Mac para indexar todos los archivos bajo /opt.

$ locate locate

ADVERTENCIA: La base de datos de locate (/var/db/locate.database) no existe.
Para crear la base de datos, ejecute el siguiente comando:

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

Tenga en cuenta que la base de datos puede tardar en generarse; una vez
que la base de datos haya sido creada, este mensaje ya no aparecerá.

Después de la salida del comando locate, para habilitar el comando locate en una Mac, hice lo siguiente:

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

pero regresa inmediatamente, en lugar de "tardar un tiempo", y ls -l /var/db/locate.database muestra No such file or directory.

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

        Label
        com.apple.locate
        Disabled

Entiendo que esto debería activar el proceso:

sudo launchctl enable system/com.apple.locate.plist, pero todavía veo que está deshabilitado posteriormente:

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

    Label
    com.apple.locate
    Disabled

    ProgramArguments

He iniciado sudo launchctl start com.apple.locate esta mañana, hace más de 7 horas, pero hasta ahora sigo obteniendo: ls: /var/db/locate.database: No such file or directory

Cuando intenté obtener información sobre su estado --

$ 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";
    );
};

Ese LastExitStatus" = 256 parece indicar que algo está mal. Como se mencionó antes, también intenté ejecutar el comando sudo /usr/libexec/locate.updatedb, pero ha estado en ejecución durante horas, sin embargo, sigo obteniendo: ls: /var/db/locate.database: No such file or directory

Versión de macOS:

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

¿Puedo generar un índice para opt y evitar solucionar por qué el locate entregado por el sistema no genera un resultado después de horas?

1voto

Oskar Puntos 1242

Empezaría reiniciando y abriendo dos ventanas: una para Monitor de Actividad y otra segunda terminal para verificar las cosas a medida que habilitas la herramienta y verificas que inicia.

Ejecuta el comando a continuación para ignorar el disparador del demonio de lanzamiento, ya que perderías cualquier salida o errores...

me@m2 /tmp % sudo -s
Contraseña:
root@m2 tmp # time /usr/libexec/locate.updatedb
/usr/libexec/locate.updatedb  11.35s usuario 18.40s sistema 51% cpu 57.899 total

En mi M2 Air, la base de datos se construyó inicialmente en unos 3 minutos, por lo que deberías poder ver las cosas iniciándose a menos que se aborte inmediatamente. Si no recibes ningún error de lo anterior, intentemos cambiar tu archivo /etc/locate.rc para descomentar SEARCHPATHS y que sea solo /opt (o incluso más estrecho, una carpeta específica más dentro de opt que te interese probar).


Algunas notas para investigaciones futuras:

sudo launchctl load -w siempre debería ejecutarse de inmediato: está alternando una transacción de base de datos, que otro proceso launchd vigila y luego inicia las acciones si es necesario. En tu caso, llama inmediatamente a /bin/sh /usr/libexec/locate.updatedb y puedes usar ps para ver esto en mi 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

Los primeros y últimos elementos no están relacionados con el comando launchctl load - el resto son todos procesos que crean el archivo de base de datos para ti. Ejecuta el comando ps antes de intentar solicitar una ejecución para verificar que no haya nada más presente en tu sistema que coincida con esa cadena.

El programa updatedb es un script de shell, por lo que puedes examinarlo y ver cómo se ejecuta - cambiando al usuario nobody para crear un directorio temporal (por eso no ves cómo se construye la base de datos - se mueve a su lugar si todo va bien en el proceso).

me@m2 /tmp % sudo -s
Contraseña:
root@m2 tmp # time /usr/libexec/locate.updatedb
/usr/libexec/locate.updatedb  5.27s usuario 9.66s sistema 77% cpu 19.158 total

Reconstrucciones posteriores de la base de datos tardan menos de 30 segundos ya que mi Mac en este caso está en reposo y el sistema almacena suficientes datos del sistema de archivos para que las cosas sean rápidas.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X