2016-12-08 5 views
0

내가 24는 systemd 황제

/etc/systemd/system/uwsgi.service 페도라와 Linode에 장고 1.10 systemd에서 실행 uwsgi.service를 설정하려고로 .ini 파일을 uwsgi 실행할 수 없습니다 이것은 다음 호출해야

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

[Service] 
ExecStart=/home/ofey/djangoenv/bin/uwsgi --ini /etc/uwsgi/emperor.ini 
Restart=always 
KillSignal=SIGQUIT 
Type=notify 
StandardError=syslog 
NotifyAccess=all 

[Install] 
WantedBy=multi-user.target 

, /etc/uwsgi/emporer.ini

[uwsgi] 
emperor = /etc/uwsgi/vassals 
uid = www-data 
gid = www-data 
limit-as = 1024 
logto = /tmp/uwsgi.log 

난 다음 심볼릭 링크를 사용

$ sudo ln -s /home/ofey/djangoForum/django.ini /etc/uwsgi/vassals/ 

/home/ofey/djangoForum/django.ini

[uwsgi] 
project = djangoForum 
base = /home/ofey 

chdir = %(base)/%(project) 
home = %(base)/djangoenv 
module = crudProject.wsgi:application 

master = true 
processes = 2 

socket = 127.0.0.1:3031 
chmod-socket = 664 
vacuum = true 

에 나는

Job for uwsgi.service failed because the control process exited with error code. See "systemctl status uwsgi.service" and "journalctl -xe" for details. 

$ sudo systemctl status uwsgi.service 

가 제공

$ sudo systemctl daemon-reload 
$ sudo systemctl restart nginx.service 
$ sudo systemctl retart uwsgi.service 

마지막 명령이 제공, 모두와 함께 다시 시작했다 ,

● uwsgi.service - uWSGI Emperor 
    Loaded: loaded (/etc/systemd/system/uwsgi.service; disabled; vendor preset: disabled) 
    Active: inactive (dead) 

Dec 07 23:56:28 ofeyspi systemd[1]: Starting uWSGI Emperor... 
Dec 07 23:56:28 ofeyspi uwsgi[7834]: [uWSGI] getting INI configuration from /etc/uwsgi/emperor.ini 
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Main process exited, code=exited, status=1/FAILURE 
Dec 07 23:56:28 ofeyspi systemd[1]: Failed to start uWSGI Emperor. 
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Unit entered failed state. 
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Failed with result 'exit-code'. 
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Service hold-off time over, scheduling restart. 
Dec 07 23:56:28 ofeyspi systemd[1]: Stopped uWSGI Emperor. 
Dec 07 23:56:28 ofeyspi systemd[1]: uwsgi.service: Start request repeated too quickly. 
Dec 07 23:56:28 ofeyspi systemd[1]: Failed to start uWSGI Emperor. 

uwsgi.service가 실행되지 않는 이유를 알 수 없습니다. 내가 사용하는 대신 systemd 통해 이동하지

uwsgi 실행,

$ sudo를 --ini django.ini

+1

에 문제가 발생 참조 문제가 발생할 수 있습니다? 그것은 www-data, root 또는 다른 사용자입니까? sudo로 실행할 때 작동한다는 것은 권한 기반인지 궁금합니다. – Withnail

답변

1

그에 대한 가능성이 가장 높은 이유는 황제가 할 수없는 것입니다 :

  1. 프로세스 ID를 작성하는 .pid 파일을 생성;
  2. vassals에 대한 유닉스 소켓 파일을 만듭니다 (귀하의 경우 사용하지 않으셔도됩니다 : 3031 포트).
  3. --logto 옵션 (귀하의 경우 /tmp/uwsgi.log)으로 지정된 로그 파일에 쓰십시오. 이러한 파일이 존재하고 다른 사용자 (대부분 루트)가 소유하거나 서비스를 시작하는 사용자가 쓸 수 없습니다 놓은 디렉토리에있는 경우

이 자주 발생합니다.

Systemd의 상태 기록은이 주제에 대해별로 유익하지 않습니다. 출력이 문제가 다음을 시도, 권한이 있음을 표시하는 경우

$ /home/ofey/djangoenv/bin/uwsgi --ini /etc/uwsgi/emperor.ini 

: 그래서, 사건을 식별하는 가장 빠른 방법은 루트가 아닌로 systemd의 서비스 에서 ExecStart 명령을 실행하고 출력을 볼 수있다.당신이 이미 제안 된 바와 같이, www-data 사용자를 대신하여 서버를 실행하려고하고 있기 때문에

, 당신이 있는지 확인하십시오

[Service] 
User=www-data 
Group=www-data 
RuntimeDirectory=uwsgi 

당신의 systemd 단위 설정에.

runtime_dir = /run/uwsgi 
pidfile=%(runtime_dir)/%n.pid 

# if you prefer using unix-socket instead of a port 
socket = %(runtime_dir)/%n.sock 

# trying to chmod-socket is useless with a port, by the way 
chmod-socket = 664 

%n 변수 : 다음, 당신의 하인에 .INI 파일을이를 추가하여 .pid 파일과 유닉스 소켓 파일 (있는 경우) 그 디렉토리 (예 : 아래/실행/uwsgi)에서 생성되어 있는지 확인 주어진 예에서 확장자가없는 vassal의 .ini 파일 이름을 나타냅니다 (full-list here 참조).

마지막으로 Emperor 및 vassals 'configs에 지정된 --logto 파일에 쓰기 가능 권한이 있는지 확인하십시오.

당신이 그것을 을 같은 (다른 소유자를 방지 할 수있는 루트 소유 상기 임시 기존 파일과 을 떠나 uwsgi --ini /etc/uwsgi/emperor.ini 루트 로 다음 Ctrl + D로 procecc을 종료 실행하는 경우, 유의하시기 바랍니다 파일을 삭제하거나 chown/chmod 파일을 다시 삭제할 때까지 www-data)을 쓰기 권한이 없습니다.

1

서비스 파일에 RuntimeDirectory=uwsgi을 추가 uwsgi systemd docs 조언. 그것을 추가하십시오.

/tmp/uwsgi.log도 확인하여 거기에서 로깅이 생성되었는지 확인하십시오.

+0

감사합니다. 하지만 ExecStart =/root/uwsgi/uwsgi는 어떻게됩니까? --ini /etc/uwsgi/emperor.ini 가상 장치 또는 시스템의 uwsgi 파일을 참조해야합니까?/usr/local/share/applications/test_project/bin이/usr/bin/uwsgi에있는 시스템의 virtualenv 또는 uwsgi 바이너리일까요? 나는/usr/local/share/applications/test_project/ –

+0

에있는 새로운 virtualenv 안에 장고를 재설치했다. 또한 uwsgi systemd docs에 "당신은 systemd 버전 (예 : Debian Jessie의 215)과 조심해야한다. SIGQUIT 신호는 systemd 서비스를 휴지통에 버립니다. KillSignal = SIGTERM + "die-on-term"UWSGI 옵션을 사용하십시오. " 나는 이것이 또한 문제가 될 수 있을까? –