如何在 Linux 中以非 root 使用者身份執行 MongoDB?
我可以將 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
- 現在,我已將所有我能找到的 mongo 目錄上的所有權更改為非 root 使用者,即
/var/lib/mongo
,var/log/mongodb
,data/db
,var/run/mongodb
$sudo chown -R nonRootUser:nonRootUser [directory]
- 我刪除了
mongod.lock
文件3)我也
--repair
跑過它仍然給我同樣的錯誤。
我也試過
$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
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
它是亞馬遜 Linux。我可以像 $mongod 一樣啟動它,但我想將它作為守護程序執行,以便它連續執行。
nonRootUser 是我在 ec2-user 之外創建的一個新使用者。如果您不是 ec2 使用者,可能存在一些與執行守護程序相關的配置問題?
更新:將所有內容的所有權更改為 ec2-user,仍然得到與以前完全相同的錯誤。
您提到您使用
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
因此,為了作為服務執行,您必須使用
sudo
orroot
。mongod
除了授予使用者一個 shell,為其分配一個密碼,以該使用者身份登錄,然後執行服務之外,沒有簡單的方法可以解決這個問題。這仍然會導致嘗試修改的錯誤,ulimits
通常不建議這樣做。要在不將 MongoDB 作為服務執行的情況下啟動 MongoDB,因為您使用了
rpm
,所以mongod
二進製文件應該在您的路徑中,所以以下應該可以工作mongod --dbpath /path/to/data --logpath /path/to/mongod.log --fork
請注意,這樣做會以目前登錄的使用者身份執行它,這意味著所有數據文件都
mongod.log
必須可由該使用者寫入。理想情況下,這些文件應歸該使用者所有。
更改目錄和文件的權限後,不要忘記註銷並重新登錄。
我仍然無法執行它
$ service mongod start
它只能以 root 身份執行。
但或者,您可以像這樣將其作為守護程序執行:
$ mongod --fork --logpath to/logpath
為了安全起見,我為 logpath 創建了 data/log 目錄。是的,除了 Amazon Linux 上的 ec2-user 之外,您還可以創建其他使用者,他們也可以執行 mongodb