programing

MongoDB 3.0의 '소켓 파일 링크 해제 실패' 오류

css3 2023. 3. 16. 21:43

MongoDB 3.0의 '소켓 파일 링크 해제 실패' 오류

MongoDB는 처음입니다.Windows 7 호스트의 VM인 Ubuntu 13.0 LTS에 MongoDb 3.0을 설치하려고 합니다.MongoDB는 정상적으로 설치되었지만(패키지 등), 명령어를 실행하면sudo service mongod start"/var/log/mongodb/mongod.log" 로그 파일에 다음 오류가 나타납니다.누가 이 오류를 이해하는 것을 도와줄 수 있나요?인터넷에는 이와 관련된 내용이 없습니다.

2015-04-23T00:12:00.876-0400 I CONTROL ****** SERVER RESTARTED **** 2015-04-23T00:12:00.931-0400 E NETWOR [initandlisten] 소켓파일 /tmp/mongodb-27017.sock errornokno1 조작이 허용되지 않습니다.

이 문제는 제가 직접 수정했습니다.mongodb-27017.sockfile. 이 파일을 삭제한 후 서비스를 실행했는데 정상적으로 동작했습니다.하지만 저는 아직 문제의 근본 원인을 알 수 없습니다.명령어 출력ls - lat /tmp/mongodb-27017.sock지금이다

srwx------ 1 mongodb nogroup 0 Apr 23 06:24 /tmp/mongodb-27017.sock

KurioZ7이 제공하는 답변 대신 현재 사용자에게 .sock 파일의 권한을 설정할 수 있습니다.

sudo chown `whoami` /tmp/mongodb-27017.sock

내가 sudo 없이 mongod를 하고 싶다면 이것은 나에게 효과가 있다.KurioZ7s answer와 같은 파일을 삭제하면, 다음에 컴퓨터를 재기동해도 같은 에러가 발생합니다.

이 문제는 다음 명령을 사용할 때 발생합니다.

mongod

명령어를 사용하기 전에

sudo service mongod start

문제를 해결하려면 다음 중 하나를 수행합니다.

파일에 적절한 권한을 설정합니다.

/tmp/mongodb-27017.sock

또는

파일 삭제

/tmp/mongodb-27017.sock

달려.

sudo service mongod start && mongod

가장 가능성이 높은 원인은 mongod 프로세스가 어느 시점에서 root 사용자에 의해 시작되었기 때문입니다.따라서 소켓파일(/tmp/mongodb-27017.sock)은 루트 사용자가 소유하고 있었습니다.mongod 프로세스는 보통 전용 사용자로 실행되며 해당 사용자는 해당 파일을 삭제할 권한이 없습니다.

해결 방법은 이미 알고 있듯이 삭제하는 것이었습니다.그 후 mongodb는 올바른 권한으로 다시 만들 수 있었습니다.이는 reboot 후에도 mongodb가 init 스크립트를 사용하여 시작되거나 올바른 사용자 계정으로 실행되는 한 유지됩니다.

$ sudo mongod

그것은 나를 위해 문제를 해결한다.

/tmp 디렉토리에서 소유권 mongodb-27017.sock 파일을 변경하고 mongod를 다시 시작합니다.

cd /tmp

sudo chown mongodb:mongodb mongodb-27017.sock
sudo systemctl start mongod

UNIX 기반의 운영체제에서는 Bastronaut가 제공하는 답변 대신 mongod가 완전한 사용자 권한을 가진 폴더에 .sock 파일을 저장하도록 지정할 수도 있습니다(mongod를 실행하는 방법에 해당). 그러면 mongod도 종료 시 .sock 파일을 삭제할 수 있습니다..sock 파일이 저장되는 기본 폴더는 '/tmp'입니다.다른 폴더를 지정하려면 사용자 지정 mongodb 구성 파일(예: 'mongodb.conf')을 사용하여 다음 항목을 추가합니다.

net:
  unixDomainSocket:
    pathPrefix: "anotherFolder"

그런 다음 다음 명령을 사용하여 mongod를 실행할 수 있습니다.

$ mongod --config /path/to/mongodb.conf

매뉴얼은 https://docs.mongodb.org/manual/reference/configuration-options/ #net.unixDomainSocket.pathPrefix 에서 참조할 수 있습니다.

재시작 후 mongod 서비스를 수동으로 재시작하면 문제가 해결.

장기적인 해결책은 mongod.conf 파일의 ip address 'net' 부분이 아닌 정적 호스트 이름을 추가하는 것이었습니다(문제는 mongod servis가 시작되었을 때 ip address가 아직 서버에 주어지지 않았다는 것입니다).

도커를 사용할 때 이 문제가 발생할 경우 다음 질문을 참조하십시오.

MongoDB 도커 컨테이너 "소켓 파일 링크 해제 실패"

언급URL : https://stackoverflow.com/questions/29813648/failed-to-unlink-socket-file-error-in-mongodb-3-0