database - 五十一个数据库错误 - 重命名现有日志文件并且子进程退出并出现错误 100

标签 database mongodb debugging fiftyone

这是我最近在启动五十一的新实例时遇到的错误。这是:

Process 8027 (service/main.py --51-service db --multi) did not respond
{"t":{"$date":"2022-12-13T12:43:10.939Z"},"s":"I",  "c":"CONTROL",  "id":20697,   "ctx":"-","msg":"Renamed existing log file","attr":{"oldLogPath":"/home/isaac/.fiftyone/var/lib/mongo/log/mongo.log","newLogPath":"/home/isaac/.fiftyone/var/lib/mongo/log/mongo.log.2022-12-13T12-43-10"}}
Subprocess ['/home/isaac/.local/lib/python3.8/site-packages/fiftyone/db/bin/mongod', '--dbpath', '/home/isaac/.fiftyone/var/lib/mongo', '--logpath', '/home/isaac/.fiftyone/var/lib/mongo/log/mongo.log', '--port', '0', '--nounixsocket'] exited with error 100:

我有一个解决方案,但感觉更像是一个临时修复,因为当我重新启动计算机时错误会再次出现。

有人有永久解决方案吗?

最佳答案

这发生在你的内核意外死亡之后。它使 Mongo 数据库保持运行。

您可以分两步检查:

  1. 手动运行与 FiftyOne 相同的命令。您可以在 Subprocess [...] 日志行中找到它的路径。对于您的情况,请在终端中运行以下命令:
    /home/isaac/.local/lib/python3.8/site-packages/fiftyone/db/bin/mongod --dbpath '/home/isaac/.fiftyone/var/lib/mongo' --port 0 --nounixsocket

(通过在必要时删除引号和逗号以及日志路径参数从您发布的错误中提取)

然后您将看到错误消息,其中包括如下内容:

{"t":{"$date":"2023-08-21T10:01:46.459+00:00"},"s":"E",  "c":"CONTROL",  "id":20557,   "ctx":"initandlisten","msg":"DBException in initAndListen, terminating","attr":{"error":"DBPathInUse: Unable to lock the lock file: /home/isaac/.fiftyone/var/lib/mongo/mongod.lock (Resource temporarily unavailable). Another mongod instance is already running on the /home/isaac/.fiftyone/var/lib/mongo directory"}}

这清楚地表明还有另一个 mongod 正在运行(消息的 error: 部分)。这使我们进入第二步:

  • 运行ps -ef |在另一个终端窗口中 grep [m]ongo 。您将看到一行正在运行的进程。
  • isaac  31820     1  1 08:47 ?        00:01:03 /home/isaac/miniconda3/envs/test-env/lib/python3.9/site-packages/fiftyone/db/bin/mongod --dbpath /home/isaac/.fiftyone/var/lib/mongo --logpath /home/isaac/.fiftyone/var/lib/mongo/log/mongo.log --port 0 --nounixsocket
    

    这是崩溃的内核留下的东西。你必须阻止它:

    kill 31820
    

    该数字是 ps 输出中第二列中出现的进程 ID。如果它不起作用,您可以执行 kill -9 31820 (更积极的进程终止)。

    如果您执行了常规的kill(没有-9),那么一切都应该很好,您可以重新启动内核并导入五十一 .

    但是如果您必须使用-9,那么锁定文件可能会在磁盘上徘徊。你必须将其删除。找到初始错误消息中的路径并删除该文件:rm/home/isaac/.fiftyne/var/lib/mongo/mongod.lock

    现在一切都应该没问题了。

    关于database - 五十一个数据库错误 - 重命名现有日志文件并且子进程退出并出现错误 100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74785235/

    相关文章:

    java - 无法将数据从 JTable 插入数据库

    sql - 无法加入备忘录、OLE 或超链接对象 - Access 2007 - 外部联接

    ajax - Mongolab 和网络延迟?

    c# - 在不安装 Visual Studio 的情况下在计算机上调试代码

    javascript - Webstorm 远程调试 + 调试时编辑本地 javascript 文件

    debugging - 我的应用程序挂起,windbg 转储分析显示所有线程都处于挂起/解冻状态。这是什么意思?

    database - MicrosoftEntityFrameworkCore 无法从程序集中找到迁移

    java - 检查 Oracle 数据库性能的工具

    javascript - Mongoose 数组推送失败

    node.js - 使用计数器集合在 node-mongodb-native 中自动递增