내 서버에서 실행 중인 서비스를 표시하는 Python 스크립트를 작성하려고 합니다.
문제는 mongodb가 서버에서 계속 실패하고 이런 일이 발생할 때마다 이를 시작하는 명령을 수동으로 작성해야 한다는 것입니다.
내가 원하는 것은 특정 서비스가 중단될 때 이 작업을 자동화하는 것입니다.
지금까지 나는 이것을 썼다.https://gist.github.com/prodicus/67609dd984309d0a82f9
나는 이것이 매우 기본적인 사람들이라는 것을 알고 있습니다. 아직 갈 길이 멀다 :)
이제 서비스를 어떻게 시작하나요?몽골어 데이터베이스그리고아파치이 스크립트를 통해? 어떤 조언이라도 매우 도움이 될 것입니다.
답변1
내 서버에서 실행 중인 서비스를 표시하는 Python 스크립트를 작성하려고 합니다.
그러지 마세요. 그건정확히프로세스 관리자가 좋아 upstart
하거나 systemd
유용한 것. 를 사용하려면 systemd
간단한 mongo 단위 파일이 다음과 같을 수 있습니다.
[Unit]
Description=High-performance, schema-free document-oriented database
After=syslog.target network.target
[Service]
Type=forking
User=mongodb
EnvironmentFile=/etc/sysconfig/mongod
PIDFile=${PIDFILE-/var/run/mongodb/mongod.pid}
ExecStart=/usr/bin/mongod $OPTIONS run
PrivateTmp=true
LimitNOFILE=64000
TimeoutStartSec=180
[Install]
WantedBy=multi-user.target
실패 시 자동으로 다시 시작하려면 이 [Service]
섹션에 다음을 추가하면 됩니다.
Restart=on-failure
불행하게도 최신 프로세스 관리자가 없는 시스템에서 작업하는 경우 다음과 같은 도구를 사용할 수 있습니다.가정 교사동일한 효과를 얻으려면.
하지만 실제로 앱이 계속 충돌한다면 문제의 원인을 찾아보는 것이 좋습니다. Mongodb는 파일이 가리키는 logpath
곳 /etc/mongod.conf
( 내 시스템) 에 정보를 기록하는데 /var/log/mongodb/mongodb.log
, 이는 아마도 문제를 찾는 첫 번째 장소일 것입니다.
다른 응용 프로그램은 충돌의 근본 원인을 찾는 데 도움이 되는 유사한 진단 정보를 제공합니다.
답변2
빠르고 더러운 방법:
cron에 스크립트를 넣어 X분마다 실행하고 mongodb가 실행 중이 아니면 다시 시작할 수 있습니다.
아래의 이 간단한 스크립트의 주요 내용은 grep 응답 코드를 사용하여 재부팅이 발생해야 하는지 결정한다는 것입니다. 그러나 grep 명령 자체가 프로세스 목록에 나타나기 때문에 첫 번째 grep은 항상 성공을 반환하므로 거기에서 두 번째 grep을 사용해야 합니다. 따라서 ps의 출력에서 "Grep for THIS STRING"이라고 말하면 grep은 항상 "Grep for THIS STRING" 명령을 사용하여 프로세스를 찾기 때문에 항상 먼저 이를 찾습니다.
물론 이 작업을 수행하는 더 좋고 더 좋은 방법이 있지만 아래 논리가 작동합니다. 결국에는 추악할 수도 있지만 작동합니다. 나는 네트워크가 매우 열악하고 연결이 자주 끊기는 경우에도 다른 대륙의 극도로 느린 동기화가 계속 작동하도록 작성해야 했던 간단한 스크립트를 빌렸습니다.
#!/bin/bash
# DATE var only included in case you want some rudimentary logging on when mongo drops/restarts. You will have to add that yourself.
DATE=`date +%m-%d-%H:%M:%S`
ps -ef | grep 'unique first part of unique string that you see from ps which indicates mongo is running' | grep 'second part of unique string that you see from ps when mongo is running';
if [ $? == "1" ];
then
command to restart mongodb; can also include other commands to make sure it runs correctly like removing stale locks etc;
fi
답변3
루트로 실행되나요? 이 경우 service xxxx start
스크립트에서 다음을 수행 할 수 있습니다 xxxx
.몽골어 데이터베이스또는아파치.