从脚本启动 mongo 时出现权限问题

从脚本启动 mongo 时出现权限问题

如果我运行以下命令,一切都将按预期进行:

sudo mongod --fork --dbpath /path/to_data/ --port 27027 --syslog

但是,如果我将以下命令放入 startmongo.sh 并使用 sudo 运行它,我会收到错误:

mongod --fork --dbpath /path/to_data/ --port 27027 --syslog

错误:

[root@server Folder]# sudo ./startmongo.sh
about to fork child process, waiting until server is ready for connections.
forked process: 2394
ERROR: child process failed, exited with error number 100
To see additional information in this output, start without the "--fork" option.

如果我查看日志文件,我会看到以下内容:

STORAGE [initandlisten] initAndListn 中出现异常:Location28596:无法确定数据目录 /path/to_data/ 中锁定文件的状态:boost::filesystem::status:权限被拒绝:“/path/tod_data/mongod.lock”,终止

那么我如何从脚本启动 Mongo?

答案1

--fork

    Enables a daemon mode that runs the mongod process in the background. By default mongod does not run as a daemon: typically you will run mongod as a daemon, either by using --fork or by using a controlling process that handles the daemonization process (e.g. as with upstart and systemd).

因此,当您使用 fork 而不使用 sudo 时,有效 uid 没有权限。

编辑:所以我的意思是,如果您不想守护进程,您应该使用 nohup 并&管理脚本中的所有内容。您的日志data directory /path/to_data/: boost::filesystem::status: Permission denied意味着新生成的进程没有权限访问文件或数据。这里--fork正在做一些有趣的事情,所以它不会像您上面提到的那样工作。

您可以尝试两种选择:

  1. 使用类似nohup mongod --fork --dbpath /path/to_data/ --port 27027 --syslog &
  2. 在脚本中添加 sudo 或直接从脚本调用 upstart 或 systemd 文件。

希望这会有所帮助。

相关内容