Ich versuche, einen Django-Server mit Nginx + uWSGI unter Ubuntu 18.04 auf einer Instanz von Amazon EC2 einzurichten.
** Verschiedene Versionen ** Nginx: 1.14.0 uWSGI: 2.0.18 Python: 3.7.5 Django: 2.2.11
Um uWSGI zu starten, habe ich zunächst die folgende Datei mit dem Namen uwsgi-hogehoge.service erstellt.
[Unit]
Description=uWSGI service for mysite
[Service]
User=ubuntu
ExecStart=/bin/bash -c 'sh /hogehoge/start.sh'
ExecStartPre=/bin/bash -c 'sh /hogehoge/start_pre.sh'
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
start.sh enthält den Prozess zum Starten von uwsgi.
Ich habe eine Servicedatei erstellt, um uWSGI und Nginx zu starten und einen symbolischen Link auf systemd zu setzen. Und
$ systemctl start uwsgi-hogehoge.service
Wenn ich versuche, den Dienst mit zu starten, ist dies anscheinend nicht möglich, soweit ich den Status sehen kann.
$ journalctl -xe
Als ich das Protokoll mit überprüfte, wurde der folgende Fehler angezeigt.
uwsgi: command not found
・ Der Uwsgi-Pass ist normal. -Es ist kein Fehler in Bezug auf Berechtigungen wie Berechtigungen.
Aus dem oben Gesagten geht hervor, dass der Pfad von uwsgi normalerweise übergeben wird, aber ich habe die Hypothese in Frage gestellt, dass der Pfad von systemd nicht nur übergeben wird, wenn er als Startbefehl ausgeführt wird.
Immerhin steckt in allem ein großer Vorfahr. Ich fand den folgenden Artikel von Gott und löste alles.
Lassen Sie systemd Benutzerumgebungsvariablen lesen
Zitat aus dem obigen Artikel
Als ich nachgeschlagen habe, befand sich systemd in .barshrc und .bash_profile Ich habe festgestellt, dass die von mir definierten Umgebungsvariablen nicht gelesen wurden.
Es scheint, dass ...
$ echo $PATH
Zeigen Sie den Pfad mit an. Dann
/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ubuntu/.local/bin
Es wurde so angezeigt. Dann habe ich ein sysconfig-Verzeichnis in / etc erstellt und eine Datei mit einem geeigneten Namen erstellt. In meinem Fall war ich ein Benutzer namens Ubuntu, daher habe ich den Dateinamen in Ubuntu geändert. Dann habe ich die Ubuntu-Datei wie folgt bearbeitet.
# cat <_EOF_ > /etc/sysconfig/ubuntu
PATH=/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ubuntu/.local/bin/usr/local/bin
_EOF_
Legen Sie als Nächstes den Pfad zu der Datei fest, die Sie zuvor in der Datei uwsgi-hogehoge.service erstellt haben.
[Unit]
Description=uWSGI service for mysite
[Service]
User=ubuntu
EnvironmentFile=/etc/sysconfig/ubuntu <--- Hier hinzufügen! !!
ExecStart=/bin/bash -c 'sh /hogehoge/start.sh'
ExecStartPre=/bin/bash -c 'sh /hogehoge/start_pre.sh'
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
Jetzt können Sie die Umgebungsvariablen richtig lesen, wenn Sie den Dienst mit systemd starten.
$ systemctl daemon-reload
Laden Sie das Service-Datei-Update ordnungsgemäß und erneut
$ systemctl start uwsgi-hogehoge
Diesmal hat es richtig angefangen.
Recommended Posts