IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

bash, tache de fond


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut bash, tache de fond
    Bonjour à tous.

    Grand débutant dans les script bash, je me retrouve avec un problème que je n'arrive pas à appréhender.
    Mais tout d'abord, le contexte.
    J'utilise un serveur node afin de réaliser un tchat, conjointement à une application développée en php. Le tout étant héberger sur un serveur ubuntu.
    Afin de controler node.js, j'utilise un script appelé via php tel que suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/bin/bash
     
    pid_file="node.pid"
    log_file="logs/node-$(date +%Y-%m-%d).log"
     
    # Si l'arrêt est demandé, on arrête le serveur Node.js.
    if [ "$1" == "stop" ]
    then
    	if [ -f $pid_file ]
    	then
    		kill $(cat $pid_file)
    		rm $pid_file
    		exit 0
    	fi
    fi
     
    # Si le lancement est demandé, on lance le serveur Node.js
    if [ "$1" == "start" ]
    then
    	node map_server.js 2>> "$log_file" &
    	echo $! > $pid_file 
    	exit 0
    fi
    Afin de pouvoir avoir un suivi des erreur, je redirige stderr dans un fichier. Toute fois, c'est là que çà coince.
    Tant que le processus n'est pas tué, ma page tourne en rond et je reste du script php ne s’exécute pas.
    Le serveur node est bien lancé et si je redirige la sortie vers /dev/null, le script ce déroule normalement.

    Si une âme charitable, ou pas, avez un bout de solution a m'apporter, j'en serai ravi.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    un script PHP, qui appelle un script bash, qui appelle un script javascript...

    je suis sûr qu'on peut faire plus compliquer, mais t'es sur la bonne voie.
    essaie encore !

    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Serait-il possible de voir comment tu appelles le script depuis php ? Sinon c'est pas forcément l'idéal de passer par du PHP pour gérer un service nodejs, et des alternatives comme ton init préféré, supervisord ou même le grand méchant systemd (qui fait tant de bruit en ce moment) me semblent un poil plus appropriés pour gérer des services

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    Merci de votre attention.
    Comme l'interface d'administration est coder en php et que le service doit être arrêter et redémarrer lors d'une maintenance automatique elle aussi coder en php, ce choix me semblait le plus approprié. Sans parler du fait que le service doit pouvoir être gérable par des non informaticiens.
    Voici donc les fonctions de la classe qui gère le lancement et l'arrêt du service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    public function switch_state($etat){
    		if($etat == self::Etat_Offline){
    			$this->stop();
    		}
    		elseif($etat>= self::Etat_Lock && $etat <= self::Etat_Open){
    			$this->start();
    		}
    	}
     
    	private function start()
    	{
    		// On arrête le serveur
    		exec('bash '.$this->_sh.' stop');
     
    		// On lance le serveur
    		exec('bash '.$this->_sh.' start');
    	}
     
    	private function stop() {
     
    		// On arrête le serveur
    		exec('bash '.$this->_sh.' stop');
    	}

  5. #5
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    A mon avis, ce serait largement préférable de te tourner vers supervisord (qui propose une API XML-RPC pour le contrôler depuis un script par exemple, doc ici) que de bricoler un truc en bash à moitié bancal.

    Cependant je trouve malgré tout bizarre que le processus ne passe pas en arrière-plan, pourrais-tu faire afficher au script la commande qu'il essaie de lancer ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    Voici le résultat avec set -x, si c'est bien ce que vous souhaitiez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    + echo 19175
    + node map_server.js
    Losrque je lance le script via la console directement, tout ce passe bien. Mais via php, çà coince. Serait-ce le exec() qui pose problème ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire tourner une Application en Taches de fond
    Par ArkAng3 dans le forum MFC
    Réponses: 3
    Dernier message: 26/08/2005, 14h06
  2. Réponses: 3
    Dernier message: 07/06/2005, 14h44
  3. [application tache de fond] lancer une application
    Par jean-jacques varvenne dans le forum Général Python
    Réponses: 5
    Dernier message: 25/03/2005, 11h13
  4. executer une page en tache de fond
    Par Invité(e) dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/01/2005, 16h23
  5. [Question] serveur en tache de fond
    Par Nicaisse dans le forum Réseau
    Réponses: 11
    Dernier message: 14/08/2003, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo