mongodb 启动时的配置文件不解?

1. 当我们不加任何参数时,即执行mongod 命令时,服务报错,说没有/data/db文件目录或权限。

这点我有一点点疑惑,配置文件是干什么吃的,安装完后在/etc/mongod.cong配置文件里明明有如下配置:

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
难道意思不是说,默认存储在`/var/lib/mongodb`里面吗?  也查了资料,说仅仅执行 mongod 命令,不会去加载任何配置文件, 好吧,这个意思就是需用参数--dbpath去指定config文件。 OK,这么说也能接受,那`/data/db`这个目录又是哪里来的,是mongod程序里硬编码里的吗。 只能这么理解了我也能接受。

2. 同样的,service mongod start 同样我也不带任何参数,直接启动服务,成功执行。

这里的成功我要打个问号,虽然说linux中无回复就是成功执行的意思,不过我同样没有指定配置文件啊,那又会存储到哪里呢,是/data/db还是/etc/mongod.conf里配置的/var/lib/mongodb, 如果是/data/db, 这个文件夹我还没创建呢,又如何成功,如果是/var/lib/mongodb,为毛我这一次没指定配置文件,他又用了/etc/mongod.conf这个配置

3. 关于/etc/mongod.conf这个,到底何时生效,如何我永远不用--congig参数去指定这个文件,是不是就没啥用,那为毛安装后自动给我生成这个文件,如果是默认配置,那为毛问题1存在。

阅读 4.5k
2 个回答

其实你描述的这样行为模式恰是 Linux 下软件通用行为。
执行service mongod ...时, 执行的是/etc/init.d/mongod脚本,这个脚本里
有这样一段

...
# Default defaults.  Can be overridden by the /etc/default/$NAME
NAME=mongodb
CONF=/etc/mongodb.conf
RUNDIR=/var/run/mongodb
PIDFILE=$RUNDIR/$NAME.pid
ENABLE_MONGODB=yes
...

可见这里是指名了配置文件所在位置的。

把眼光放到整个生态系统你可以会更容易理解一些为什么会有这些问题。光就Linux来说,常用的就有RHEL/CentOS, SUSE, Ubuntu等等,还不包括一些小众的发行版。每个系统都有自己的使用习惯,放置配置文件、依赖库的位置等。所以mongod本身不会去适应所有的环境,因为有做不完的适应工作。这些工作是交给软件源和包管理器去完成的。比如rpm/deb打包的时候就包括了这使用这些包的操作系统的定制化操作。比如/var/lib/mongodb这个文件夹,就是rpm/deb创建的,/etc/mongod.conf也是。换言之,mongod是不知道/etc/mongod.conf这个文件的存在的,又怎么知道默认去找这个配置文件?同样的道理,/etc/init.d/mongod也是rpm/deb创建的,所以这里面当然知道要去哪里找配置文件,根据使用习惯应该去哪里放pid文件等。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题