gunicorn은 터미널에서 실행될 때와 서비스별로 다르게 동작합니다.

gunicorn은 터미널에서 실행될 때와 서비스별로 다르게 동작합니다.

내 웹사이트에 nginx+gunicorn+django를 사용하고 있습니다.

다음은 내 gunicorn.conf 파일입니다.

description "Gunicorn daemon for Django project"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

# If the process quits unexpectadly trigger a respawn
respawn

setuid django
setgid django
chdir /home/django

# export LC_ALL=en_US.UTF-8
# export LC_LANG=en_US.UTF-8
# export LANG=en_US.UTF-8

exec gunicorn \
    --name=eduwiki \
    --pythonpath=eduwiki \
    --bind=0.0.0.0:9000 \
    --log-level debug \
    --log-file /var/log/gunicorn/error_logs.log \
    --config /etc/gunicorn.d/gunicorn.py \
    eduwiki.wsgi:application

#    --access-logfile  /var/log/gunicorn/acclogs.log \

내가 달릴 때

service gunicorn start

그리고 dir 로 변경하면 /home/django다음 명령(이전 구성 파일의 코드와 동일)이 매력적으로 작동했습니다.

exec gunicorn     --name=eduwiki     --pythonpath=eduwiki     --bind=0.0.0.0:9000     --log-level debug     --log-file /var/log/gunicorn/error_logs.log     --config /etc/gunicorn.d/gunicorn.py     eduwiki.wsgi:application

그러나 구성 파일에서 로깅 부분을 제거하면 첫 번째 항목을 시작할 수 없습니다. exec gunicorn \ --name=eduwiki \ --pythonpath=eduwiki \ --bind=0.0.0.0:9000 \ --config /etc/ gunicorn.d/gunicorn.py \ eduwiki.wsgi:application 을 사용하면 service gunicorn start서비스가 실행됩니다. 그러나 터미널에서 직접 실행하는 것과는 다르게 동작합니다.

터미널에서 직접 실행할 때 웹페이지에 표시되는 문자 인코딩은 다음과 같이 정확합니다.

수학(그리스어 μάθnμα máthēma, “지식, 연구, 학습”에서 유래)

하지만 서비스를 사용하여 gunicorn을 실행하면 ASCII가 아닌 문자의 인코딩이 완전히 잘못되었습니다.

*

수학(그리스어 ??????m?th?ma, ?지식, 연구, 학습?)

    *

답변1

대화형 터미널 세션은 일반적으로 로캘 LC_ALL및 언어 설정 으로 자동으로 채워 LC_LANG지며 LANG많은 SSH 클라이언트는 워크스테이션에서 해당 환경 변수를 전달하여 서버 기본값을 재정의합니다.

이는 데몬이 시작 스크립트에서 서비스로 시작될 때 사용되는 시스템 기본값과 다른 경우가 많습니다. # export시작 스크립트에서 해당 행의 주석 처리를 제거 하고 환경을 적절한 설정으로 채웁니다.

관련 정보