132 votes

Comment permettre à un virtualenv dans un systemd unité de service?

Je veux "activer" un virtualenv dans un service systemd fichier.

Je voudrais éviter d'avoir un shell processus entre les systemd processus et l'interpréteur python.

Ma solution actuelle ressemble à ceci:

[Unit]
Description=fooservice
After=syslog.target network.target

[Service]
Type=simple
User=fooservice
WorkingDirectory={{ venv_home }}
ExecStart={{ venv_home }}/fooservice --serve-in-foreground
Restart=on-abort
EnvironmentFile=/etc/sysconfig/fooservice.env

[Install]
WantedBy=multi-user.target

/etc/sysconfig/fooservice.env

PATH={{ venv_home }}/bin:/usr/local/bin:/usr/bin:/bin
PYTHONIOENCODING=utf-8
PYTHONPATH={{ venv_home }}/...
VIRTUAL_ENV={{ venv_home }}

Mais j'ai de la difficulté. Je reçois ImportErrors depuis quelques enties dans sys.chemin d'accès sont manquants.

159voto

Nils Werner Points 3392

Le virtualenv est "cuit dans l'interpréteur Python dans le virtualenv". Cela signifie que vous pouvez lancer python ou console_scripts directement dans ce virtualenv et n'avez pas besoin d'activer le virtualenv première ou de gérer PATH vous-même.:

ExecStart={{ venv_home }}/bin/fooservice --serve-in-foreground

ou

ExecStart={{ venv_home }}/bin/python {{ venv_home }}/fooservice.py --serve-in-foreground

et supprimer l' EnvironmentFile entrée.

Pour vérifier qu'il est en effet correcte, vous pouvez vérifier l' sys.path en exécutant

{{ venv_home }}/bin/python -m site

et en comparant la sortie de

python -m site

3voto

MortenB Points 328

Je ne suis pas en utilisant virtualenv mais pyenv: ici est juste à utiliser le réel .pyenv chemin d'accès dans l'arborescence et assurez-vous qu'il est dans le CHEMIN

Ex: pyenv activer flacon-prod pour l'utilisateur mortenb qui est en cours d'exécution dans la prod

/home/mortenb/.pyenv/versions/flask-prod/bin/python --version
Python 3.6.2

Alors pour ma gourde scripts de démarrage dans systemd *.le service que j'ai ajouter à la suite de cette arborescence:

#!/home/mortenb/.pyenv/versions/flask-prod/bin/python3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X