Aller au contenu

Comment activer/désactiver un serveur dans un environnement virtuel python avec le gestionnaire de taches ?


Messages recommandés

Bonjour ,

J'essaye de faire fonctionner un site web en python avec le framework flask ( avec gunicorn ) sur un Syno DS214 Play.

Après avoir installé le paquet Python3, j'ai transféré les fichiers du site web qui fonctionne sur un PC sous Windows 10, (sauf l'environnement virtuel).

Avec Putty, j'ai créé un environnement virtuel python3 sur le NAS et j'arrive à lancer l'application. Lorsque je ferme Putty le serveur continue de fonctionner, et pour l'arrêter je suis obligé avec Putty de rechercher les ports en écoute( netstat -taupeln|grep LISTEN), repérer celui qui m'intéresse et le stopper (kill).

Je souhaiterai pouvoir démarrer et arrêter le site avec le Gestionnaire de taches.

Pour le démarrer j'ai créé le fichier de script go.sh suivant
#!bin/sh
source /volume1/web/test/venv/bin/activate
/volume1/web/test/venv/bin/gunicorn -w 4 -b 0.0.0.0:3000 wsgi:app

Avec Putty, sous réserve de me placer dans le répertoire /volume1/web/test et en faisant sh go.sh le serveur se lance et tout fonctionne correctement.

Lorsque je lance ce même script dans le gestionnaire de taches avec la commande :
sh /volume1/web/test/go.sh
j'ai l'erreur 'module not found wsgi:app'

J'ai essayé d'ajouter :
cd  /volume1/web/test dans le script g.sh , ou en première ligne du gestionnaire de taches, et là j'ai des erreurs et rien ne fonctionne.

Quant au script pour arrêter le serveur, je ne sais pas par où démarrer.
J'imagine qu'il faut trouver le n° du processus qui écoute le port 3000.


Si vous avez des idées sur les solutions, je suis preneur

Merci d'avance. Charles


 

Lien vers le commentaire
Partager sur d’autres sites

le gestionnaire de tache est un espèce de CRON. il est important de donner a ton script le même environnement qu'en ligne de commande (PATH; variables d'environnement, shell) 

je remarque une erreur dans le shebang, il manque un "/" la premiere ligne doit être exactement

#! /bin/sh
  ^un espace suivit d'un /

je te conseille de aussi de mettre dans ton script le cd (change directory) pour que le script soit dans le bon repertoire pour lancer la commande.

pour l’arrêter une commande comme ci dessous doit faire l'affaire.

#! /bin/bash
killall -TERM gunicorn

 

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,
Merci pour ces infos.
Le script pour arrêter fonctionne parfaitement, mais pour le lancer c'est pas encore ça.

Avec Putty voilà ce que je fais et qui fonctionne
root@Robert:/# cd volume1/web/test
root@Robert:/volume1/web/test# source venv/bin/activate
(venv) root@Robert:/volume1/web/test# gunicorn -w 4 -b 0.0.0.0:3000 wsgi:app
[2021-03-18 18:52:58 +0100] [4013] [INFO] Starting gunicorn 20.0.4
[2021-03-18 18:52:58 +0100] [4013] [INFO] Listening at: http://0.0.0.0:3000 (4013)
[2021-03-18 18:52:58 +0100] [4013] [INFO] Using worker: sync
[2021-03-18 18:52:58 +0100] [4015] [INFO] Booting worker with pid: 4015
[2021-03-18 18:52:58 +0100] [4016] [INFO] Booting worker with pid: 4016
[2021-03-18 18:52:58 +0100] [4017] [INFO] Booting worker with pid: 4017
[2021-03-18 18:52:58 +0100] [4018] [INFO] Booting worker with pid: 4018

et voilà le script dans le gestionnaire de tâches :
#! /bin/sh
cd /volume1/web/test
source venv/bin/activate
gunicorn -w 4 -b 0.0.0.0:3000 wsgi:app

qui me retourne l'erreur suivante :
-----------------------------------------------------------------
Le planificateur de tâches à terminé une tâche planifiée.
Tâche : Gunicorn Start
Heure de début : Thu, 18 Mar 2021 15:03:39 GMT
Heure d’arrêt : Thu, 18 Mar 2021 15:07:15 GMT
État actuel : 0 (Normal)
Sortie standard/erreur :
[2021-03-18 15:03:41 +0100] [23159] [INFO] Starting gunicorn 20.0.4
[2021-03-18 15:03:41 +0100] [23159] [INFO] Listening at: http://0.0.0.0:3000 (23159)
[2021-03-18 15:03:41 +0100] [23159] [INFO] Using worker: sync
[2021-03-18 15:03:41 +0100] [23163] [INFO] Booting worker with pid: 23163
[2021-03-18 15:03:41 +0100] [23164] [INFO] Booting worker with pid: 23164
[2021-03-18 15:03:41 +0100] [23165] [INFO] Booting worker with pid: 23165
[2021-03-18 15:03:41 +0100] [23166] [INFO] Booting worker with pid: 23166
[2021-03-18 15:03:45 +0100] [23164] [ERROR] Error handling request /contact
Traceback (most recent call last):
  File "/volume1/web/test/venv/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 134, in handle
    self.handle_request(listener, req, client, addr)
  File "/volume1/web/test/venv/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 165, in handle_request
    resp, environ = wsgi.create(req, client, addr,
  File "/volume1/web/test/venv/lib/python3.8/site-packages/gunicorn/http/wsgi.py", line 183, in create
    path_info = path_info.split(script_name, 1)[1]
IndexError: list index out of range
[2021-03-18 15:04:04 +0100] [23166] [ERROR] Error handling request /contact
Traceback (most recent call last):
  File "/volume1/web/test/venv/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 134, in handle
    self.handle_request(listener, req, client, addr)
  File "/volume1/web/test/venv/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 165, in handle_request
    resp, environ = wsgi.create(req, client, addr,
  File "/volume1/web/test/venv/lib/python3.8/site-packages/gunicorn/http/wsgi.py", line 183, in create
    path_info = path_info.split(script_name, 1)[1]
IndexError: list index out of range
[2021-03-18 15:07:14 +0100] [23165] [INFO] Worker exiting (pid: 23165)
[2021-03-18 15:07:14 +0100] [23166] [INFO] Worker exiting (pid: 23166)
[2021-03-18 15:07:14 +0100] [23164] [INFO] Worker exiting (pid: 23164)
[2021-03-18 15:07:14 +0100] [23159] [INFO] Handling signal: term
[2021-03-18 15:07:15 +0100] [23159] [INFO] Shutting down: Master
------------------------------------------------------------------------

Il me semble que le serveur démarre et ensuite il y a un problème de path.

Dans la structure de l'appli il y a 2 fichiers qui se nomment wsgi.py
Un dans le répertoire de base ( volume1/web/test ) et un dans l'environnement virtuel ( volume1/web/test/venv/lib/python3.8/site-packages/gunicorn/http )
Quand on est dans Putty c'est le 1er qui se lance et quand c'est le gestionnaire de tâches c'est le 2 ème.

Je continue à chercher ...

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

je pense que lorsque tu est dans putty il doit y avoir une variable d’environnement ou un PATH différent que lorsque tu est dans le gestionnaire de tache.

tape la commande

env

dans ton environnement et met dans le script les mêmes variables susceptible de changer.

exemple

#! /bin/sh
cd /volume1/web/test
source venv/bin/activate
PATH=/bin/boum:/paf/tralala:/opt/zip:
gunicorn -w 4 -b 0.0.0.0:3000 wsgi:app 

Cordialement.

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.