2014-02-11 1 views
2

나는 Flask를 처음 사용하고 있으며, redis 서버가 실행 중인지 확인하고 그렇지 않은 경우 시작하려고합니다. 여기에 내가 가진 무엇 :플라스크를 시작하기 전에 redis가 실행되고 있는지 확인하려면 어떻게해야합니까?

@app.before_first_request 
def initialize(): 
    cmd = 'src/redis-cli ping' 
    p = subprocess.Popen(cmd,stdout=subprocess.PIPE) 
    out, err = p.communicate() 
    #if out.startswith('Could not connect to Redis'): #start redis here 
    if err is not None: raise Exception(err) 

을하지만, 오류가 발생합니다 "OSError : [errno를 2] 해당 파일 또는 디렉터리"

가 레디 스 서버가 실행 중인지 확인하는 쉬운 방법이 없다? 레디 스의

+1

: 예를 들어

여기 레디 스를 확인하는 설정입니다. 난 내 플라스크 애플 리케이션과 redis 단일 컨테이너/RPM/어떤 배포되었는지 확인거야. 홍채를 터뜨리는 것은 플라스크 앱의 직업이 아닙니다. – hughdbrown

+0

당신은 더 구체적 일 수 있습니까? 나는 술병에 처음이다. – user3287829

+1

플라스크에 대한 코멘트가 아니다. 그것은 소프트웨어 환경에서 책임의 분리에 관한 의견입니다. "구성은 응용 프로그램의 일부가 아닙니다."Hynek이 말했습니다. 꼭두각시 또는 요리사 또는 무언가 또는 소금 스택을 사용하여 앱 및 모든 종속성을 배포하십시오. 슈퍼 바이저 등으로 앱과 종속물이 실행되고 있는지 확인하십시오. – hughdbrown

답변

8

Useping 명령 :

import redis 
from redis import ConnectionError 
import logging 

logging.basicConfig() 
logger = logging.getLogger('redis') 

rs = redis.Redis("localhost") 
try: 
    rs.ping() 
except ConnectionError: 
    logger.error("Redis isn't running. try `/etc/init.d/redis-server restart`") 
    exit(0) 

샘플 출력 : 난 당신이 supervisord 또는 monit 그들이 처리 여부를 확인하도록 설계되어 같은 supervision의 어떤 종류를 사용하는 것이 좋습니다 것입니다

ERROR:redis:Redis isn't running. try `/etc/init.d/redis-server restart` 
+0

및 실행되지 않는 경우 어떻게 시작합니까? 또한, before_first_request 함수에 이것을 넣어야합니까? – user3287829

+0

수동으로 또는 '꼭두각시'와 비슷한 것으로 시작하는 것이 좋으며 플라스크 응용 프로그램으로 실행하지 말고 명령을 로그 출력에 추가하십시오. –

+0

'before_first_request' 함수에서이 코드를 사용하지 마십시오.이 코드를 플라스크 응용 프로그램 ('app = Flask()')에 정의하십시오. –

0

, 호스트, 파일 등등이 작업을 수행하고 있고, 그렇지 않은 경우에는 다시 시작하십시오. 나는이 방법을받지 않을 것

check host redis with address <your_redis_host> 
    if failed icmp type echo count 3 with timeout 3 seconds then alert 
    if failed port 6379 with timeout 15 seconds then alert 
관련 문제