ed-*_*-ta 6 mongodb linux amazon-ec2
我可以将 MongoDB 启动为$sudo service mongod start
. 当我开始时没有sudo
它给我这个错误:
/etc/init.d/mongod: line 58: ulimit: open files: cannot modify limit: Operation not permitted
/etc/init.d/mongod: line 60: ulimit: max user processes: cannot modify limit: Operation not permitted
Starting mongod: runuser: may not be used by non-root users
Run Code Online (Sandbox Code Playgroud)
1)现在,我已将所有权更改为我能找到的所有 mongo 目录上的非 root 用户,即/var/lib/mongo
,,,,var/log/mongodb
data/db
var/run/mongodb
$sudo chown -R nonRootUser:nonRootUser [directory]
Run Code Online (Sandbox Code Playgroud)
2)我删除了mongod.lock
文件
--repair
3)我也跑过
它仍然给我同样的错误。
我也尝试过
$mongod --fork --logpath /var/log/mongodb.log
about to fork child process, waiting until server is ready for connections.
forked process: 18566
ERROR: child process failed, exited with error number 1
Run Code Online (Sandbox Code Playgroud)
mongod.log 文件这样说:
2016-03-17T15:03:49.053+0000 I NETWORK [initandlisten] waiting for connections on port 27017
2016-03-17T15:03:54.144+0000 I CONTROL [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends
Run Code Online (Sandbox Code Playgroud)
这是亚马逊Linux。我可以像 $mongod 一样启动它,但我想将它作为守护进程运行,以便它连续运行。
nonRootUser 是我除了 ec2-user 之外创建的新用户。如果您不是 ec2 用户,也许存在一些与运行守护进程相关的配置问题?
更新:将所有内容的所有权更改为 ec2-user,但仍然遇到与以前完全相同的错误。
更新
这个答案非常旧,涵盖了使用init
脚本的旧版本 MongoDB。对于systemd
系统,请参阅下面Wernfried Domscheit的回答。
旧答案
您提到您使用rpm
安装程序在 Amazon Linux AMI 上安装 MongoDB。执行此操作时,mongod
系统上会创建用户,并且所有相应的文件都会创建并归该mongod
用户所有。启动由 安装的 MongoDB 时rpm
,该命令必须由 运行root
或使用 运行sudo
。这是因为 init 脚本必须执行更改用户命令,以便mongod
可以将进程分叉为用户的子进程mongod
。
未能使用root
或sudo
启动该服务会导致您上面引用的错误。
/etc/init.d/mongod: line 58: ulimit: open files: cannot modify limit: Operation not permitted
/etc/init.d/mongod: line 60: ulimit: max user processes: cannot modify limit: Operation not permitted
Starting mongod: runuser: may not be used by non-root users
Run Code Online (Sandbox Code Playgroud)
因此,为了作为服务运行,您必须使用sudo
或root
。mongod
除了向用户授予 shell、为其分配密码、以该用户身份登录,然后运行服务之外,没有简单的方法可以解决此问题。这仍然会导致尝试修改时出错,ulimits
并且通常不建议这样做。
要启动 MongoDB 而不将其作为服务运行,因为您使用了rpm
,mongod
二进制文件应该位于您的路径中,因此以下内容应该有效
mongod --dbpath /path/to/data --logpath /path/to/mongod.log --fork
Run Code Online (Sandbox Code Playgroud)
请注意,执行此操作将以当前登录用户的身份运行它,这意味着所有数据文件都必须mongod.log
可由该用户写入。理想情况下,这些文件应归该用户所有。
更改目录和文件的权限后,不要忘记注销并重新登录。
我仍然无法运行它
$ service mongod start
Run Code Online (Sandbox Code Playgroud)
它只能以 root 身份运行。
但您也可以将其作为守护进程运行,如下所示:
$ mongod --fork --logpath to/logpath
Run Code Online (Sandbox Code Playgroud)
为了安全起见,我为 logpath 创建了 data/log 目录。是的,除了 ec2-user 之外,您还可以在 Amazon Linux 上创建其他用户,他们也可以运行 mongodb
归档时间: |
|
查看次数: |
29580 次 |
最近记录: |