Mongod 服务启动退出,代码为 100
Mongod Service start exits with code 100
问题
我的 mongo 服务不再启动:
root@machine ~ # service mongod start
root@machine ~ # service mongod status
● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2017-08-15 12:03:51 CEST; 2s ago
Docs: https://docs.mongodb.org/manual
Process: 26942 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=100)
Main PID: 26942 (code=exited, status=100)
Aug 15 12:03:50 machine systemd[1]: Started High-performance, schema-free document-oriented database.
Aug 15 12:03:51 machine systemd[1]: mongod.service: Main process exited, code=exited, status=100/n/a
Aug 15 12:03:51 machine systemd[1]: mongod.service: Unit entered failed state.
Aug 15 12:03:51 machine systemd[1]: mongod.service: Failed with result 'exit-code'.
退出代码 100 模糊定义为:
Returned by mongod when the process throws an uncaught exception.
我做了什么
首先,我通过 the official guide.
在 Ubuntu 16.04.2 LTS 上安装了我的 mongodb (3.4.7)
启动和停止服务工作正常。所以我继续启用身份验证(再次通过 the official guide)。
然后我添加了服务可以to run on server startup。
root@machine ~ # systemctl enable mongod.service
mongod.conf
我还编辑了我的配置文件,它通过了一个 yaml linter:
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine: mmapv1
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
#processManagement:
security:
authorization: enabled
文件的所有权是
root@machine ~ # ls -la /etc/ | grep mongo
-rw-r--r-- 1 root root 599 Aug 15 11:42 mongod.conf
DbPath
我知道 dbpath 有问题所以这就是 /var/lib/mongodb
在所有权方面的问题:
root@ machine ~ # ls -la /var/lib/ | grep mongo
drwxr-xr-x 4 mongodb mongodb 4096 Aug 15 11:54 mongodb
服务列表
当通过 service --status-all
列出所有服务时,没有任何 mongo 相关服务的条目。
有人知道是什么导致了这个问题吗?
更新
按照我的建议 运行 以下命令(稍作修改):
root@machine ~ /usr/bin/mongod --verbose --config /etc/mongod.conf &
[1] 28495
当我做对的时候,这是二进制文件的直接执行。这让我现在至少可以登录 mongo shell:
root@machine ~ # mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
>
但是,服务状态仍然是失败,退出代码为 100。
更新更新
输入时 root@machine ~ # /usr/bin/mongod --verbose
我收到以下错误:
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] MongoDB starting : pid=28642 port=27017 dbpath=/data/db 64-bit host=machine
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] db version v3.4.7
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] git version: cf38c1b8a0a8dca4a11737581beafef4fe120bcd
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] allocator: tcmalloc
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] modules: none
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] build environment:
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] distmod: ubuntu1604
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] distarch: x86_64
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] target_arch: x86_64
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] options: { systemLog: { verbosity: 1 } }
2017-08-15T13:45:40.973+0200 D - [initandlisten] User Assertion: 29:Data directory /data/db not found. src/mongo/db/service_context_d.cpp 98
2017-08-15T13:45:40.973+0200 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
2017-08-15T13:45:40.973+0200 I NETWORK [initandlisten] shutdown: going to close listening sockets...
2017-08-15T13:45:40.973+0200 I NETWORK [initandlisten] shutdown: going to flush diaglog...
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] now exiting
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] shutting down with code:100
您的数据目录中的权限可能仍然存在一些问题。特别是如果您从终端开始使用 运行 mongod。
我发现当您从终端 运行 时,数据文件是在 root 下创建的,而不是在 mongodb 用户下创建的。修复..
sudo chown -R mongodb:mongodb /var/lib/mongodb/*
rm /var/lib/mongodb/mongod.lock
systemctl restart mongod
systemctl status mongod
试试这个!
删除 'dbath'
下的 mongod.lock
文件,它应该可以正常启动。
我知道现在已经很晚了,但也许这会对有需要的人有所帮助。
我检查了 /var/log/mongodb 发现了这个:
Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted
我猜权限设置为 root,而不是 mongodb 因为我使用 sudo 启动 mongod。 (也许有人可以帮助澄清这一点)
所以解决办法是删除那个/tmp/mongodb-27017.sock
然后重新启动服务。至少那对我有用。 (抱歉我的英语不好)
https://mkyong.com/mongodb/mongodb-failed-to-unlink-socket-file-tmpmongodb-27017/
检查 dbath 上的日志文件。这通常位于 /var/log/mongodb
日志文件是 mongodb.log
我的问题是磁盘上 space 低...我收到了与您相同的错误消息。
我的磁盘上没有空 space 所以我在文件 /etc/mongodb.conf 上使用了小文件选项
只需在此配置文件中添加以下行:
smallfiles = true
我在 Windows 桌面上使用 mongoDB,所以
start it as administrator
或
from cmd with admin.
然后检查是否已经启动))))))
很重要
因为如果你尝试启动它两次它也会给你
exit code 100
也许你应该检查你的启动参数。
我的开胃菜:
"C:\Program Files\MongoDB\Server.0\bin\mongod.exe" --dbpath "C:\Program Files\MongoDB\Server.0\data" --auth
问题
我的 mongo 服务不再启动:
root@machine ~ # service mongod start
root@machine ~ # service mongod status
● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2017-08-15 12:03:51 CEST; 2s ago
Docs: https://docs.mongodb.org/manual
Process: 26942 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=100)
Main PID: 26942 (code=exited, status=100)
Aug 15 12:03:50 machine systemd[1]: Started High-performance, schema-free document-oriented database.
Aug 15 12:03:51 machine systemd[1]: mongod.service: Main process exited, code=exited, status=100/n/a
Aug 15 12:03:51 machine systemd[1]: mongod.service: Unit entered failed state.
Aug 15 12:03:51 machine systemd[1]: mongod.service: Failed with result 'exit-code'.
退出代码 100 模糊定义为:
Returned by mongod when the process throws an uncaught exception.
我做了什么
首先,我通过 the official guide.
在 Ubuntu 16.04.2 LTS 上安装了我的 mongodb (3.4.7)启动和停止服务工作正常。所以我继续启用身份验证(再次通过 the official guide)。
然后我添加了服务可以to run on server startup。
root@machine ~ # systemctl enable mongod.service
mongod.conf
我还编辑了我的配置文件,它通过了一个 yaml linter:
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine: mmapv1
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
#processManagement:
security:
authorization: enabled
文件的所有权是
root@machine ~ # ls -la /etc/ | grep mongo
-rw-r--r-- 1 root root 599 Aug 15 11:42 mongod.conf
DbPath
我知道 dbpath 有问题所以这就是 /var/lib/mongodb
在所有权方面的问题:
root@ machine ~ # ls -la /var/lib/ | grep mongo
drwxr-xr-x 4 mongodb mongodb 4096 Aug 15 11:54 mongodb
服务列表
当通过 service --status-all
列出所有服务时,没有任何 mongo 相关服务的条目。
有人知道是什么导致了这个问题吗?
更新
按照我的建议 运行 以下命令(稍作修改):
root@machine ~ /usr/bin/mongod --verbose --config /etc/mongod.conf &
[1] 28495
当我做对的时候,这是二进制文件的直接执行。这让我现在至少可以登录 mongo shell:
root@machine ~ # mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
>
但是,服务状态仍然是失败,退出代码为 100。
更新更新
输入时 root@machine ~ # /usr/bin/mongod --verbose
我收到以下错误:
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] MongoDB starting : pid=28642 port=27017 dbpath=/data/db 64-bit host=machine
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] db version v3.4.7
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] git version: cf38c1b8a0a8dca4a11737581beafef4fe120bcd
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] allocator: tcmalloc
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] modules: none
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] build environment:
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] distmod: ubuntu1604
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] distarch: x86_64
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] target_arch: x86_64
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] options: { systemLog: { verbosity: 1 } }
2017-08-15T13:45:40.973+0200 D - [initandlisten] User Assertion: 29:Data directory /data/db not found. src/mongo/db/service_context_d.cpp 98
2017-08-15T13:45:40.973+0200 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
2017-08-15T13:45:40.973+0200 I NETWORK [initandlisten] shutdown: going to close listening sockets...
2017-08-15T13:45:40.973+0200 I NETWORK [initandlisten] shutdown: going to flush diaglog...
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] now exiting
2017-08-15T13:45:40.973+0200 I CONTROL [initandlisten] shutting down with code:100
您的数据目录中的权限可能仍然存在一些问题。特别是如果您从终端开始使用 运行 mongod。
我发现当您从终端 运行 时,数据文件是在 root 下创建的,而不是在 mongodb 用户下创建的。修复..
sudo chown -R mongodb:mongodb /var/lib/mongodb/*
rm /var/lib/mongodb/mongod.lock
systemctl restart mongod
systemctl status mongod
试试这个!
删除 'dbath'
下的 mongod.lock
文件,它应该可以正常启动。
我知道现在已经很晚了,但也许这会对有需要的人有所帮助。
我检查了 /var/log/mongodb 发现了这个:
Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted
我猜权限设置为 root,而不是 mongodb 因为我使用 sudo 启动 mongod。 (也许有人可以帮助澄清这一点)
所以解决办法是删除那个/tmp/mongodb-27017.sock
然后重新启动服务。至少那对我有用。 (抱歉我的英语不好)
https://mkyong.com/mongodb/mongodb-failed-to-unlink-socket-file-tmpmongodb-27017/
检查 dbath 上的日志文件。这通常位于 /var/log/mongodb 日志文件是 mongodb.log
我的问题是磁盘上 space 低...我收到了与您相同的错误消息。
我的磁盘上没有空 space 所以我在文件 /etc/mongodb.conf 上使用了小文件选项
只需在此配置文件中添加以下行:
smallfiles = true
我在 Windows 桌面上使用 mongoDB,所以
start it as administrator
或
from cmd with admin.
然后检查是否已经启动))))))
很重要
因为如果你尝试启动它两次它也会给你
exit code 100
也许你应该检查你的启动参数。
我的开胃菜:
"C:\Program Files\MongoDB\Server.0\bin\mongod.exe" --dbpath "C:\Program Files\MongoDB\Server.0\data" --auth