Ich folgeDasAnleitung zum Einrichten von Django mit Postgres, Nginx und Gunicorn unter Ubuntu 18.04.
Ich habe die folgende Datei .socket erstellt
sudo nano /etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
Ich habe die folgende Datei .service erstellt
sudo nano /etc/systemd/system/gunicorn.service
Ursprüngliche RECOMENDED_FORMATTING-s in derFührung
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=sammyRECOMENDED_FORMATTING
Group=www-data
WorkingDirectory=/home/sammyRECOMENDED_FORMATTING/myprojectdirRECOMENDED_FORMATTING
ExecStart=/home/sammyRECOMENDED_FORMATTING/myprojectdirRECOMENDED_FORMATTING/myprojectenvRECOMENDED_FORMATTING/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
myprojectRECOMENDED_FORMATTING.wsgi:application
[Install]
WantedBy=multi-user.target
Wie ich meine eigene Version formatiert habeIch hatte meine virtuelle Umgebung außerhalb des Projektordners auf dem Server
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=SERVER_USER
Group=www-data
WorkingDirectory=/home/SERVER_USER/MAIN_PROJECT_FOLDER
ExecStart=/home/SERVER_USER/ven/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/home/SERVER_USER/MAIN_PROJECT_FOLDER/MAINAPPLICATION_FOLDER.sock \
MAINAPPLICATION_FOLDER.wsgi:application
[Install]
WantedBy=multi-user.target
Ich habe auch versucht, diese wie ursprünglich empfohlen zu belassen
--bind unix:/run/gunicorn.sock \
Dann habe ich versucht, den folgenden Code auszuführen
sudo systemctl start gunicorn
Fehlermeldung 1
Failed to start gunicorn.service: Unit gunicorn.service not found.
und ich habe es auch mit 2 versucht
sudo systemctl start gunicorn.socket
Fehlermeldung 2
Failed to start gunicorn.socket: Unit gunicorn.socket is not loaded properly: Invalid argument.
See system logs and 'systemctl status gunicorn.socket' for details.
Um dieses Problem zu lösen, habe ich versucht
- https://stackoverflow.com/questions/40711747/Fehler beim Starten der Gunicorn-Service-Unit. Der Gunicorn-Service wurde nicht gefunden.Dies verweist zurück auf genau dieselbe Anleitung, die ich durchführe, allerdings mit einer älteren Linux-Version.
- Dies ist nicht der gleiche Code und wird nicht beantwortetEinheit gunicorn.service konnte nicht geladen werden: Keine solche Datei oder kein solches Verzeichnis
- Ausführen:
systemctl status gunicorn.socket
Ergebnis:Warning: The unit file, source configuration file or drop-ins of gunicorn.socket changed on disk ● gunicorn.socket - gunicorn daemon Loaded: error (Reason: Invalid argument) Active: inactive (dead)
- Ausführen:
systemctl is-enabled gunicorn.socket
Ergebnis:enabled
- Ausführen:
systemctl is-enabled gunicorn.service
Ergebnis:Failed to get unit file state for gunicorn.service: No such file or directory
Antwort1
Ihr Dienst enthält den Abschnitt [Installieren]. Das bedeutet, dass Sie sudo systemctl enable gunicorn.service
beim Systemstart den Befehl zum Starten des Dienstes ausführen müssen.
Sobald Sie den Befehl ausführen, wird im Verzeichnis ein symbolischer Link zu dieser Datei erstellt /etc/systemd/system/multi-user.target.wants/
.
Beachten Sie, dass Sie auch die Socket-Datei mit dem Namen erstellen gunicorn.socket
und aktivieren müssen. Sobald Sie sie aktiviert haben, können Sie den Socket aktivieren, indem Sie den Befehl ausführen sudo systemctl start gunicorn.socket
. Sie müssen den Dienst nicht ausführen, da systemd die Abhängigkeit ermittelt.
Den Status des Dienstes können Sie mit prüfen systemctl status gunicorn.service
.
Antwort2
in meinem Fall hat der Server die Datei nicht erstellt gunicorn.socket
. Also musste ich die Datei selbst erstellen und aktivieren.
Gehen Sie zu: /etc/systemd/system
und überprüfen Sie alle verfügbaren Dateien und Verzeichnisse mit dem Befehl ls
.
Wenn die Datei nicht vorhanden ist, versuchen Sie, die Datei mit Folgendem von Anfang an neu zu erstellen: sudo nano ~/etc/systemd/system/gunicorn.socket
, oder sudo nano gunicorn.socket
.
und aktivieren Sie es dann zuerst durch: sudo systemctl enable gunicorn.socket
, nach der Aktivierung führen Sie Folgendes aus: sudo systemctl start gunicorn.socket
.
Wenn alles einwandfrei funktioniert, wird der Status der Datei gunicorn.socket
als aktiv angezeigt. Nach dem Ausführen des Befehls sudo systemctl status gunicorn.socket
wird Folgendes angezeigt:
gunicorn.socket - gunicorn socket
Loaded: loaded (/etc/systemd/system/gunicorn.socket; enabled; vendor prese>
Active: active (listening) since Fri 2020-06-26 17:53:10 UTC; 14s ago
Triggers: ● gunicorn.service
Listen: /run/gunicorn.sock (Stream)
Tasks: 0 (limit: 1137)
Memory: 0B
CGroup: /system.slice/gunicorn.socket