Mongodb(代码=已退出,状态=14)失败,但没有任何明显的错误



我有带Ubuntu 18.04 LTSMongodb的VPS,我的脚本一直工作到3天前,但突然我的托管服务器重新启动(我从一家托管公司购买了它(,当我的服务器再次启动时,我看到我的网站不工作,也没有连接到数据库。systemctl status mongod的结果是:

mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2020-10-29 22:47:35 +0330; 17h ago
Docs: https://docs.mongodb.org/manual
Process: 2800 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=14)
Main PID: 2800 (code=exited, status=14)
Oct 29 22:47:35 MYHOSTNAME systemd[1]: Started MongoDB Database Server.
Oct 29 22:47:35 MYHOSTNAME systemd[1]: mongod.service: Main process exited, code=exited, status=14/n/a
Oct 29 22:47:35 MYHOSTNAME systemd[1]: mongod.service: Failed with result 'exit-code'.

当我重新启动服务时,什么也没发生。我检查了/var/log/mongodb/mongod.log,这是日志:

2020-10-30T15:53:39.251+0330 I REPL     [signalProcessingThread] Stepping down the ReplicationCoordinator for shutdown, waitTime: 10000ms
2020-10-30T15:53:39.458+0330 I CONTROL  [signalProcessingThread] Shutting down the LogicalSessionCache
2020-10-30T15:53:39.460+0330 I NETWORK  [signalProcessingThread] shutdown: going to close listening sockets...
2020-10-30T15:53:39.460+0330 I NETWORK  [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock
2020-10-30T15:53:39.461+0330 I NETWORK  [signalProcessingThread] Shutting down the global connection pool
2020-10-30T15:53:39.461+0330 I STORAGE  [signalProcessingThread] Shutting down the PeriodicThreadToAbortExpiredTransactions
2020-10-30T15:53:39.462+0330 I REPL     [signalProcessingThread] Shutting down the ReplicationCoordinator
2020-10-30T15:53:39.462+0330 I SHARDING [signalProcessingThread] Shutting down the ShardingInitializationMongoD
2020-10-30T15:53:39.463+0330 I COMMAND  [signalProcessingThread] Killing all open transactions
2020-10-30T15:53:39.463+0330 I -        [signalProcessingThread] Killing all operations for shutdown
2020-10-30T15:53:39.463+0330 I NETWORK  [signalProcessingThread] Shutting down the ReplicaSetMonitor
2020-10-30T15:53:39.463+0330 I CONTROL  [signalProcessingThread] Shutting down free monitoring
2020-10-30T15:53:39.464+0330 I CONTROL  [signalProcessingThread] Shutting down free monitoring
2020-10-30T15:53:39.466+0330 I FTDC     [signalProcessingThread] Shutting down full-time data capture
2020-10-30T15:53:39.466+0330 I FTDC     [signalProcessingThread] Shutting down full-time diagnostic data capture
2020-10-30T15:53:39.470+0330 I STORAGE  [signalProcessingThread] Shutting down the HealthLog
2020-10-30T15:53:39.471+0330 I STORAGE  [signalProcessingThread] Shutting down the storage engine
2020-10-30T15:53:39.472+0330 I STORAGE  [signalProcessingThread] WiredTigerKVEngine shutting down
2020-10-30T15:53:39.472+0330 I STORAGE  [signalProcessingThread] Shutting down session sweeper thread
2020-10-30T15:53:39.472+0330 I STORAGE  [signalProcessingThread] Finished shutting down session sweeper thread
2020-10-30T15:53:39.648+0330 I STORAGE  [signalProcessingThread] shutdown: removing fs lock...
2020-10-30T15:53:39.648+0330 I -        [signalProcessingThread] Dropping the scope cache for shutdown
2020-10-30T15:53:39.648+0330 I CONTROL  [signalProcessingThread] now exiting
2020-10-30T15:53:39.648+0330 I CONTROL  [signalProcessingThread] shutting down with code:0

我做了telnet localhost 27017,它工作得很好,可以连接(对于远程连接,它是关闭的(。

我手动删除了/tmp/mongodb-27017.sock,检查了/var/log/mongodb/var/lib/mongodb的所有权,一切正常。我还对这两个文件夹执行了chown -R mongodb:mongodb,以在突然重新启动期间发生任何不正确的所有权时更正它们,但什么都不起作用。

顺便说一句,当我运行/usr/bin/mongod --config /etc/mongod.conf命令时,我的网站会运行,我可以登录到我的用户帐户等等。我目前正在screen中运行我的网站,但我不知道如何找到问题并解决它。

你能帮我检查一下MongoDB出了什么问题以及如何修复吗?和测试配置文件的nginx -t一样,有类似的命令吗?我读了man mongod,但一无所获。

编辑以添加/etc/mongodb.conf内容

# mongod.conf
# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
#  engine:
#  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

# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:

试试这个,它对我有效:

sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown mongodb:mongodb /tmp/mongodb-27017.sock    
sudo service mongod restart

在我的情况下,用户是mongod,/var/lib文件夹中的文件夹是mongo,所以我必须运行这个命令

chown -R mongod:mongod /var/lib/mongo/
chown mongod:mongod /tmp/mongodb-27017.sock
systemctl restart mongod

我在/var/log/syslog中使用grepping mongo进行了彻底的调查,发现了这个问题。

我执行了chown -R mongodb:mongodb /var/lib/mongodb/并终止了我的screen命令,然后重新启动了mongod服务,然后检查了status,所以现在服务和我的网站都在运行,没有问题。

要获得更好的解决方案版本,请运行以下命令:

chown -R mongodb:mongodb /var/lib/mongodb/
systemctl restart mongod
  1. 转到/tmp并找到mongodb sock

    cd /tmp; ls -l *.sock

  2. 更改该.sock文件的所有者,该文件过去的名称为mongodb-27017.sock,但如果您发现它的名称不同,则可以使用

    chown -R mongod:mongod /var/lib/mongo

    chown mongod:mongod mongodb-27017.sock

如果结果如下:chown:invalid user:mongod:mongod,则意味着mongodb的用户和组不是mongod。

我知道这是一个迟来的答案,但由于这个问题在Ubuntu的mongodb中是已知的,我建议这样做:

  1. 创建一个名为/root/mongo.sh的文件,其中包含以下内容:
chown -R mongodb:mongodb /var/lib/mongodb/
systemctl restart mongod
  1. 在teminal中运行chmod +x /root/mongo.sh
  2. 通过运行crontab -e将其添加到crontab中:
0 2 * * * /root/mongo.sh

现在它每天凌晨02:00运行这个文件,你就不用担心了。

如果你在白天看到问题,只运行这个:

/root/mongo.sh

我用mongo 一个接一个地杀死了所有已经运行的进程

root@lancer:/mongodb# ps -ef | grep mongo
root       721 27584  0 Sep27 pts/7    00:00:00 sudo nano mongo.conf
root       722   721  0 Sep27 pts/7    00:00:00 nano mongo.conf
root       736 27584  0 Sep27 pts/7    00:00:00 sudo nano mongo.conf
root       737   736  0 Sep27 pts/7    00:00:00 nano mongo.conf
root       779 27584  0 Sep27 pts/7    00:00:00 sudo nano mongo.conf
root       780   779  0 Sep27 pts/7    00:00:00 nano mongo.conf
root       873 27584  0 Sep27 pts/7    00:00:00 vi mongo.conf
root      1102     1  0 Sep27 ?        00:03:34 mongod --dbpath /mongodb/data --logpath /mongodb/log/mongod.log --fork
root      1150 27584  0 Sep27 pts/7    00:00:02 mongosh
root     10858  5566  0 Sep20 pts/7    00:00:00 sudo systemctl status mongod
root     12386 27584  0 16:27 pts/7    00:00:00 vi mongod.conf
root     13091 27584  0 16:48 pts/7    00:00:00 sudo systemctl status mongod
root     13092 13091  0 16:48 pts/7    00:00:00 systemctl status mongod
root     13258 27584  0 16:52 pts/7    00:00:00 sudo adduser mongod
root     13459 27584  0 16:52 pts/7    00:00:00 sudo adduser mongodb
root     13507 13460  0 16:53 pts/7    00:00:00 /usr/bin/chfn mongodb
root     14091 27584  0 17:37 pts/7    00:00:00 mongo
root     16620 27584  0 20:32 pts/7    00:00:00 grep --color=auto mongo
root     19169 27584  0 11:25 pts/7    00:00:00 vi mongod.service
root     24606 22371  0 Sep27 pts/7    00:00:00 mongo
root     24763 22371  0 Sep27 pts/7    00:00:00 vi mongodb.conf
root     29184 27584  0 Sep27 pts/7    00:00:00 sudo nano /lib/systemd/system/mongod.service
root     29185 29184  0 Sep27 pts/7    00:00:00 nano /lib/systemd/system/mongod.service 

and then did
root@lancer:/# sudo systemctl start mongod
root@lancer:/# sudo systemctl status mongod
● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2021-09-28 20:39:09 IST; 33s ago
Main PID: 16836 (mongod)

然后它开始成功运行。

已检查/etc/mongod.conf-它引用了

pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

检查/var/run(没有mongodb(

mkdir -p /var/run/mongodb
chown mongod.mongod /var/run/mongodb
systemctl daemon-reload
systemctl start mongod
systemctl status mongod

这似乎奏效了。。。但它没有

贷方:https://stackoverflow.com/a/71384602/2182349

在一个Centos7盒子上,我将这些行添加到/lib/systemd/system/mongod.service

ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown -R mongod.mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
PermissionsStartOnly=true
PIDFile=/var/run/mongodb/mongod.pid
Type=forking

mongod——版本db版本v5.0.15

最新更新