目的:在Ubuntu16.04安装MongoDB,并且设置普通用户开机启动(mongodb不推荐root启动)。
我当前的普通用户为star,将由这个用户执行mongodb服务
从官网下载MongoDB安装包,解压,移动到存放目录
tar zxf mongodb-linux-x86_64-ubuntu1604-4.0.1.tgz
sudo mv mongodb-linux-x86_64-ubuntu1604-4.0.1 /usr/local/mongodb
添加环境变量
sudo vim /etc/profile
# 在文件末尾添加一行export PATH=/usr/local/mongodb/bin:$PATH
source /etc/profile
添加配置文件
sudo vim /etc/mongod.conf
mongod.conf的内容
#详细记录输出
verbose = true
#绑定IP
bind_ip = 0.0.0.0
#指定服务端口号
port = 27017
#指定日志文件,注意是指定文件不是目录
logpath = /var/log/mongodb/logs/mongodb.log
#使用追加方式写日志
logappend = true
#指定数据库路径
dbpath = /var/lib/mongodb/db
#设置每个数据库将被保存在一个单独的目录
directoryperdb = true
#启用验证
auth = false
#以守护进程的方式运行MongoDB,创建服务器进程
fork = true
#安静退出
quiet = true
官方似乎推荐数据库文件存放在/var/lib/mongodb,日志文件存放在/var/log/mongodb,创建相应目录和文件,并把文件所有者修改成普通用户
sudo mkdir /var/lib/mongodb/db -p
sudo mkdir /var/log/mongodb/logs -p
sudo touch /var/log/mongodb/logs/mongodb.log
sudo chown star:star /var/lib/mongodb/db
sudo chown star:star /var/log/mongodb/logs/mongodb.log
到这一步算是安装完成,尝试用普通用户身份启动mongod
star@for-vm:/usr/local/mongodb$ mongod -f /etc/mongod.conf
2018-08-18T13:18:42.748+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
about to fork child process, waiting until server is ready for connections.
forked process: 6005
child process started successfully, parent exiting
启动成功,接下来设置开机启动。
添加文件mongodb.service
cd /etc/systemd/system
sudo vim mongodb.service
mongodb.service的内容
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
# 注意这个地方是个坑,如果你的mongodb配置文件中设置的作为守护线程运行,下面这一行一定要加上
Type=forking
User=star
ExecStart=/usr/local/mongodb/bin/mongod -f /etc/mongod.conf
[Install]
WantedBy=multi-user.target
注意中间要写对
然后加上执行权限
sudo chmod +x mongodb.service
到这里,可以尝试用service启动服务
# 启动
star@for-vm:~$ sudo service mongodb start
# 查看状态,看到active(running)表示成功启动
star@for-vm:~$ sudo service mongodb status
● mongodb.service - High-performance, schema-free document-oriented database
Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset: enabled)
Active: active (running) since 六 2018-08-18 14:00:44 CST; 6s ago
Process: 7727 ExecStart=/usr/local/mongodb/bin/mongod -f /etc/mongod.conf (code=exited, status=0/SUCCESS)
Main PID: 7729 (mongod)
CGroup: /system.slice/mongodb.service
└─7729 /usr/local/mongodb/bin/mongod -f /etc/mongod.conf
8月 18 14:00:43 for-vm systemd[1]: Starting High-performance, schema-free document-oriented database...
8月 18 14:00:43 for-vm mongod[7727]: 2018-08-18T14:00:43.861+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
8月 18 14:00:43 for-vm mongod[7727]: about to fork child process, waiting until server is ready for connections.
8月 18 14:00:43 for-vm mongod[7727]: forked process: 7729
8月 18 14:00:44 for-vm systemd[1]: Started High-performance, schema-free document-oriented database.
用service启动停止mongod都没问题
下面设置开机启动
sudo systemctl enable mongodb
尝试重启系统
# 系统启动后查看服务,成功自启
star@for-vm:~$ ps -ef | grep mongod | grep -v grep
star 1256 1 1 14:08 ? 00:00:01 /usr/local/mongodb/bin/mongod -f /etc/mongod.conf
最后,说点注意事项
配置文件和.service文件的拥有者依然是root,不需要变更
star@for-vm:~$ ll /etc/mongod.conf
-rw-r--r-- 1 root root 508 8月 18 11:16 /etc/mongod.conf
star@for-vm:~$ ll /etc/systemd/system/mongodb.service
-rwxr-xr-x 1 root root 233 8月 18 13:54 /etc/systemd/system/mongodb.service*
另外,数据库文件目录下文件的拥有者应该是普通用户,因为是用普通用户身份第一次运行mongod服务