uwsgi+nginx를 사용하여 django 애플리케이션을 실행하려고 하는데 cronjob 명령이 실행되지만* * * * * /usr/local/bin/lockrun --lockfile /path/to/lock_file -- uwsgi --close-on-exec -s /path/to/socket_file --chdir /path/to/project/folder/ --pp .. -w project_name.wsgi -C666 -p 32 -H /path/to/virtualenv/ 1>> /path/to/success_log 2>> /path/to/error_log
nginx 오류 로그 파일에 다음과 같은 오류가 발생합니다.
019/11/20 06:45:21 [crit] 1986#1986: *2 unix:///path/to/socket_file에 대한 connect()가 실패했습니다(2: 해당 파일 또는 디렉터리 없음). 업스트림에 연결하는 동안 클라이언트 : xxx.xxx.xx.xxx, 서버: localhost, 요청: "GET /auth/status/ HTTP/1.1", 업스트림: "uwsgi://unix:///path/to/socket_file:", 호스트: " xx.xxx.xx.xxx", 참조자: "http://xx.xxx.xx.xxx/"
nginx 구성 파일과 cronjob 명령의 소켓_파일 경로는 동일합니다. 어디에서 실수가 발생했는지 알 수 있습니까? ? ?
답변1
소켓이 존재하지 않고 로그 파일이 생성되지 않으면 uwsgi 서버가 시작되지 않습니다.
/path/to/error_log가 존재하지 않기 때문에 cron이 해당 시스템에서 작동하지 않거나 권한 문제가 있다고 가정합니다(적어도 crontab 소유자는 로그 파일에 쓸 수 없습니다).
어쨌든 일반적으로 이러한 서버는 시작하지 않습니다. 좋습니다. 불안정한 경우에는 1분 내에 다시 시작되지만 이와 같은 문제는 다른 방법으로 해결해야 합니다. 잠금 실행 등의 필요 없이 서비스가 분리될 때 자동으로 다시 시작되도록 구성할 수 있는 시스템 장치를 만드는 것이 더 좋습니다.
사용자(crontab 소유자)를 사용하여 서버를 시작해 보십시오.
uwsgi --close-on-exec -s /path/to/socket_file --chdir /path/to/project/folder/ --pp .. -w project_name.wsgi -C666 -p 32 -H /path/to/virtualenv/
껍질에서 무엇을 얻는지 확인하세요. 아니면 메일함( mail
)을 확인해보세요. cron에서 오류 메시지를 발견할 수도 있습니다.