当前位置: 代码网 > it编程>数据库>mongodb > MongoDB设置开机自启的完整步骤和常见坑有哪些

MongoDB设置开机自启的完整步骤和常见坑有哪些

2026年09月08日 mongodb 我要评论
1. mongodb 设置开机自启的步骤环境信息:操作系统:centos linux 7.6.1810mongodb 二进制路径:/usr/bin/mongod配置文件路径:/etc/mongod.c

1. mongodb 设置开机自启的步骤

环境信息:

  • 操作系统:centos linux 7.6.1810
  • mongodb 二进制路径:/usr/bin/mongod
  • 配置文件路径:/etc/mongod.conf

第一步:确认配置文件中的关键路径

grep -e "path|dbpath|pidfilepath|logpath|fork" /etc/mongod.conf

示例输出:

path: /var/log/mongodb/mongod.log
dbpath: /var/lib/mongo
pidfilepath: /var/run/mongodb/mongod.pid
fork: true

第二步:停止当前运行的 mongodb 进程

# 优雅停止进程
pkill -term mongod
sleep 3

# 确认已停止
ps -ef | grep mongod | grep -v grep

# 清理残留 pid 文件
rm -f /var/run/mongodb/mongod.pid

第三步:创建 systemd service 文件

cat > /etc/systemd/system/mongod.service << 'eof'
[unit]
description=mongodb server
after=network.target

[service]
type=forking
runtimedirectory=mongodb
runtimedirectorymode=0755
pidfile=/var/run/mongodb/mongod.pid
execstart=/usr/bin/mongod -f /etc/mongod.conf
execreload=/bin/kill -hup $mainpid
execstop=/bin/kill -term $mainpid
restart=always
restartsec=5

[install]
wantedby=multi-user.target
eof

关键配置说明:

配置项说明
typeforkingmongod.conf 中 fork: true 时必须使用
runtimedirectorymongodb每次启动前自动创建 /run/mongodb/ 目录
runtimedirectorymode0755自动创建目录的权限
pidfile/var/run/mongodb/mongod.pid与 mongod.conf 中 pidfilepath 保持一致
restartalways进程意外退出后自动重启
restartsec5重启等待间隔秒数

第四步:重载 systemd 并启动

# 重载 systemd 配置
systemctl daemon-reload

# 设置开机自启
systemctl enable mongod

# 启动服务
systemctl start mongod

第五步:验证

# 查看服务状态
systemctl status mongod

# 确认开机自启已启用
systemctl is-enabled mongod

# 确认进程正常运行
ps -ef | grep mongod | grep -v grep

# 测试连接
mongo --eval "db.admincommand('ping')"

成功输出:

● mongod.service - mongodb server
   loaded: loaded (/etc/systemd/system/mongod.service; enabled; vendor preset: disabled)
   active: active (running) since 一 2026-04-20 17:30:00 cst; 5s ago

2. mongodb 设置开机自启踩坑记

踩坑一:明明是 root 账号,systemctl 启动却失败

现象

以 root 登录服务器,手动执行以下命令可以正常启动:

/usr/bin/mongod -f /etc/mongod.conf
# child process started successfully, parent exiting

但通过 systemctl 启动就失败:

systemctl start mongod
# job for mongod.service failed because the control process exited with error code.

日志显示:

runuser[9131]: session opened for user mongod by (uid=0)
runuser[9131]: session closed for user mongod
mongod[9120]: starting mongod: [失败]

原因

系统中存在 /etc/rc.d/init.d/mongod(旧式 sysv 初始化脚本),systemctl 实际调用的是这个脚本。

而脚本内部会通过 runuser 自动切换到 mongod 用户来执行启动命令:

runuser -s /bin/bash mongod -c "/usr/bin/mongod -f /etc/mongod.conf"

整个流程如下:

你(root)→ systemctl start mongod
         → 调用 /etc/rc.d/init.d/mongod
         → runuser 切换到 mongod 用户
         → mongod 用户无写权限
         → 启动失败

手动执行时是以 root 身份运行,绕过了用户切换,所以成功。

解决方案

/etc/systemd/system/ 下创建 native systemd service 文件。

该目录优先级高于 sysv init 脚本,systemd 会直接使用新文件,不再调用 init.d 脚本,也不再切换用户。

踩坑二:服务器重启后 mongodb 自动启动失败

现象

按照踩坑一的方案配置好后,systemctl start mongod 可以正常启动,systemctl enable mongod 也已设置开机自启。

但重启服务器后,mongodb 没有自动启动,查看日志:

error starting mongod. /var/run/mongodb/mongod.pid exists.

或者:

mongod: starting mongod: [失败]

原因

/var/run 在 centos 7 中是指向 /run 的软链接,而 /run 是挂载在内存中的 tmpfs 临时文件系统:

服务器关机 → 内存清空 → /run (tmpfs) 全部消失
服务器开机 → /run 重新挂载为空目录
           → /var/run/mongodb/ 目录不存在
           → mongod 无法写入 pid 文件
           → 启动失败

注意与手动删除 pid 文件的区别:手动删除只是删除文件,/var/run/mongodb/ 目录还在;重启后连目录本身都消失了。

解决方案

在 service 文件的 [service] 段中添加 runtimedirectory=mongodb

[service]
runtimedirectory=mongodb
runtimedirectorymode=0755

runtimedirectory 是 systemd 的内置指令,会在每次启动服务之前自动创建 /run/mongodb/ 目录,服务停止后自动清理,完全不需要手动干预,从根本上解决重启后目录丢失的问题。

常见问题速查

现象原因解决
starting mongod: [失败],日志有 runusersysv init 脚本切换用户失败创建 native systemd service 文件
重启后 mongodb 未自动启动,pid 目录不存在/var/run 是 tmpfs,重启后清空service 文件中添加 runtimedirectory=mongodb
启动报错 mongod.pid exists上次异常退出残留 pid 文件rm -f /var/run/mongodb/mongod.pid
systemctl stop mongod 停不掉service 文件缺少 pidfile补充 pidfile 配置后 daemon-reload

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com