uwsgi가 재부팅 시 "/run/uwsgi" 폴더를 생성하도록 하는 가장 좋은 방법은 무엇입니까?

uwsgi가 재부팅 시 "/run/uwsgi" 폴더를 생성하도록 하는 가장 좋은 방법은 무엇입니까?

uwsgi 및 nginx와 함께 실행되도록 Django 프로젝트를 설정했으며 재부팅할 때 fs에 /run/ 폴더가 다시 생성될 때까지 uwsgi가 올바르게 시작되지 않는다는 점을 제외하면 모든 것이 예상대로 실행됩니다. /run은 "tmpfs"에 매핑되므로 부팅할 때마다 다시 생성해야 합니다.

uwsgi용으로 생성된 systemd 서비스 파일이 있습니다.

[Unit]
Description=uWSGI Module
After=syslog.target

[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=main

[Install]
WantedBy=multi-user.target

파일 /etc/uwsgi.ini은 다음과 같습니다.

[uwsgi]
uid = uwsgi
gid = uwsgi
pidfile = /run/uwsgi/uwsgi.pid
stats = /run/uwsgi/stats.sock
socket = /run/uwsgi/uwsgi.sock
master = true
processes = 1
chdir = /path/to/our/django/app
module = icscada
max-requests = 100
daemonize = /var/log/uwsgi.log

/run/uwsgi시작할 때마다 폴더를 다시 만드는 권장 방법은 무엇입니까?

답변1

tmpfiles.d(5)에서:

시스템 데몬에는 통신 소켓 및 유사한 디렉터리를 수용하기 위해 /run 아래에 개인 런타임 디렉터리가 필요한 경우가 많습니다. 이를 위해 가능하다면 RuntimeDirectory=(자세한 내용은 systemd.exec(5) 참조)를 사용하여 유닛 파일에서 선언하는 것을 고려하십시오.

그리고 systemd.exec(5)에서:

런타임 디렉토리 =, 런타임 디렉토리 모드 =

디렉터리 이름 목록을 가져옵니다. 설정된 경우 장치가 시작될 때 /run(시스템 서비스의 경우) 또는 $XDG_RUNTIME_DIR(사용자 서비스의 경우) 아래에 지정된 이름을 가진 하나 이상의 디렉터리가 생성되고 장치가 중지되면 삭제됩니다. 이러한 디렉터리는 RuntimeDirectoryMode=에 지정된 액세스 모드를 가지며 User= 및 Group=에 지정된 사용자 및 그룹이 소유합니다. 이를 사용하여 유닛의 하나 이상의 런타임 디렉터리를 관리하고 해당 수명 주기를 데몬 런타임에 바인딩합니다.

즉, 이 "작업"을 달성하기 위해 tmpfiles.d를 사용할 때 공식적으로 권장되는 방법은 다음을 추가하는 것입니다.

RuntimeDirectory=uwsgi

[Service]귀하의 유닛 파일 에 .

이는 더 짧고, 올바른 사용자/그룹 소유권으로 생성되었음을 보장하고, 데몬이 중지되면 디렉터리를 정리한다는 장점이 있습니다.

답변2

/etc/tmpfiles.d/부팅/시작 중에 systemd가 디렉터리를 생성해야 함을 정의하는 구성 파일을 생성해야 합니다 .

$ more /etc/tmpfiles.d/uwsgi.conf 
D /run/uwsgi 0770 uwsgi uwsgi -

상황에 적합하다고 생각되는 소유권/권한을 설정하세요.

노트:uwsgi위에서 제공한 설정을 사용하는 경우 Nginx 사용자에게 이 그룹을 추가해야 할 수도 있습니다 nginx.

$ sudo usermod -a nginx -G uwsgi

인용하다

답변3

결국 이 문제를 해결한 방법은 최신 배포판을 사용하는 것이었습니다. Fedora 20에서는 yum install uwsgi이러한 모든 세부 사항이 자동으로 처리되는 환경을 구축했지만 이전에는 Fedora17 시스템에서 가짜로 시도했지만 yum 저장소에서는 사용할 수 없었습니다.

Fedora 20은 uwsgi 서비스 유닛에 다음을 추가하여 이 문제를 해결합니다.

ExecStartPre=/bin/mkdir -p /run/uwsgi 
ExecStartPre=/bin/chown uwsgi:uwsgi /run/uwsgi

답변4

설치 중인 패키지 uwsgi(CentOS 7의 기본 패키지)에는 이미 올바른 /usr/lib/tmpfiles.d/uwsgi.conf파일이 포함되어 있습니다. 그러나 디렉토리는 여전히 존재하지 않습니다. 재부팅하면 systemd-tmpfiles재부팅시 생성 될 수도 있는데 제 경우에는 -

난 달려야 해

systemd-tmpfiles --create

패키지 설치 후 바로 디렉터리를 생성할 수 있도록 하기 위함입니다.

관련 정보