복붙노트

[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)

그러나, 나는 "[errno를 2] 해당 파일이나 디렉토리 OSError"오류가 발생합니다

레디 스 서버가 실행 중인지 확인하는 쉬운 방법이 있나요?

해결법

  1. ==============================

    1.사용 핑 레디 스의 cmd를 :

    사용 핑 레디 스의 cmd를 :

    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)
    

    샘플 출력 :

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

    2.난 당신이 supervisord 같은 감독의 어떤 종류를 사용하는 것이 좋습니다 또는 그들이 등등 과정, 호스트 파일이 그 일을되어 있는지 확인하도록 설계 MONIT 것이다들 직업, 그렇지 않은 경우, 다음을 다시 시작합니다.

    난 당신이 supervisord 같은 감독의 어떤 종류를 사용하는 것이 좋습니다 또는 그들이 등등 과정, 호스트 파일이 그 일을되어 있는지 확인하도록 설계 MONIT 것이다들 직업, 그렇지 않은 경우, 다음을 다시 시작합니다.

    예를 들어 여기에 체크 레디 스에 대한 설정은 다음과 같습니다

     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
    
  3. from https://stackoverflow.com/questions/21708107/how-do-i-check-if-redis-is-running-before-i-start-flask-and-start-it-if-it-isn by cc-by-sa and MIT license