J'essaie de configurer un serveur Django avec Nginx + uWSGI sur Ubuntu 18.04 sur une instance d'Amazon EC2.
** Différentes versions ** Nginx: 1.14.0 uWSGI: 2.0.18 Python: 3.7.5 Django: 2.2.11
Tout d'abord, pour démarrer uWSGI, j'ai créé le fichier suivant appelé uwsgi-hogehoge.service.
[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 contient le processus pour démarrer uwsgi.
J'ai créé un fichier de service pour démarrer uWSGI et Nginx et mettre un lien symbolique sur systemd. Et
$ systemctl start uwsgi-hogehoge.service
Lorsque j'essaie de démarrer le service avec, apparemment, ce n'est pas possible pour autant que je puisse voir l'état.
$ journalctl -xe
Lorsque j'ai vérifié le journal avec, l'erreur suivante s'est affichée.
uwsgi: command not found
・ La passe uwsgi est normale. -Ce n'est pas une erreur liée aux autorisations telles que les autorisations. -Même s'il y a une erreur autour de l'autorité en premier lieu, l'autorité appropriée est donnée au fichier et à l'utilisateur.
D'après ce qui précède, il semble que le chemin d'uwsgi soit normalement passé, mais j'ai remis en question l'hypothèse selon laquelle le chemin de systemd n'est pas transmis uniquement lorsqu'il est exécuté en tant que commande de démarrage.
Après tout, il y a un grand ancêtre dans tout. J'ai trouvé l'article de Dieu suivant et j'ai tout résolu.
Faire en sorte que systemd lise les variables d'environnement utilisateur
Citant l'article ci-dessus
Quand je l'ai recherché, systemd était en .barshrc et .bash_profile J'ai trouvé qu'il ne lisait pas les variables d'environnement que j'avais définies.
Il paraît que ...
$ echo $PATH
Affichez le chemin avec. Puis
/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
C'était affiché comme ça. Ensuite, j'ai créé un répertoire sysconfig dans / etc et créé un fichier avec un nom approprié. Dans mon cas, j'étais un utilisateur nommé ubuntu, j'ai donc changé le nom de fichier en ubuntu. Ensuite, j'ai édité le fichier ubuntu comme suit.
# 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_
Ensuite, définissez le chemin d'accès au fichier que vous avez créé précédemment dans le fichier uwsgi-hogehoge.service.
[Unit]
Description=uWSGI service for mysite
[Service]
User=ubuntu
EnvironmentFile=/etc/sysconfig/ubuntu <--- Ajoutez ici! !!
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
Vous pouvez maintenant lire correctement les variables d'environnement lorsque vous démarrez le service avec systemd.
$ systemctl daemon-reload
Chargez la mise à jour du fichier de service correctement et encore
$ systemctl start uwsgi-hogehoge
Cette fois, ça a commencé correctement.
Recommended Posts