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 :

Lancer une tache cron


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut Lancer une tache cron
    Bonjour,
    J'ai un script serveur qui permet de lancer un moteur des qu'un client distant envoi un message, les deux applications fonctionne bien maintenant j'aimerai que mon serveur reste à l’écoute des requêtes du client en arriéré plan instantanément pour lancer le moteur sous mon raspberry pi 2B (rasbian) pour cela j'ai planifié des taches CRON pour chaque minute ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * python /home/pi/serveur.py
    le serveur oui il est lancer car le client arrive à le retrouver le problème c'est que le moteur ne se lance pas alors que si je tape directement python serveur.py en ligne commande ça fonctionne bien
    des idées?
    merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    Si j'ai bien compris ton serveur ne tourne pas en continue c'est Cron qui va lancer ton serveur toutes les minutes?
    Mais du coup ton serveur ferme la socket d'écoute quand il s’arrête du coup normal que le client n'arrive pas a communiquer avec lui.

    Enfin pour ce genre de configuration, je ne pense pas que Cron soit la solution (Ça consomme du CPU pour rien s'il n'y a pas de requêtes) mais plutôt systemd :
    Tu met une socket d'écoute en continue et tu configure ton serveur en tant que service qui va dépendre de la socket.
    Du coup une instance de ton serveur se réveillera des que la socket recevra des données.

  3. #3
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tabouret Voir le message
    Si j'ai bien compris ton serveur ne tourne pas en continue c'est Cron qui va lancer ton serveur toutes les minutes?
    Mais du coup ton serveur ferme la socket d'écoute quand il s’arrête du coup normal que le client n'arrive pas a communiquer avec lui.
    .
    Le problème c'est que le serveur ecoute il reçoit le message mais il exécute pas la commande cad le moteur ne se lance pas, alors que si je lance ce même script sous le terminal ça fonctionne bien j'ai fais un peu de recherche ils parlent de sortie de cron qu'il faut la rediriger j'ai regarder dans mon log les message de CRON j'ai ceci comme message sur syslog :
    No MTA installed, discarding output peut être c'est d'ici que viens le problème , ou bien que cron n'arrive pas a comprendre la commande pour lancer le moteur?
    j'ai rajouter ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     * * * * *  python /home/pi/serveur.py 2>&1 | logger -t mycmd
    je check
    grep 'mycmd' /var/log/syslog
    le serveur fonctionne correctement mais le moteur ne démarre pas !
    merci

  4. #4
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tabouret Voir le message

    Enfin pour ce genre de configuration, je ne pense pas que Cron soit la solution (Ça consomme du CPU pour rien s'il n'y a pas de requêtes) mais plutôt systemd :
    Tu met une socket d'écoute en continue et tu configure ton serveur en tant que service qui va dépendre de la socket.
    Du coup une instance de ton serveur se réveillera des que la socket recevra des données.
    Par contre je vais faire des recherche sur systemd c'est plus pratique

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    Ton "no MTA installed..blabla" c'est juste parce que Cron n'arrive pas a envoyer de mail de reporting en rapport avec cette commande : en gros on s'en fou c'est juste pour te dire si la commande s'est bien lancée ou non.
    Limite tu peux discard l'output via le fichier de configuration ( 1> /dev/null 2>&1) mais ton problème ne vient pas de la.
    Mais je serais toi je mettrais plutôt ça dans ton Cron :
    * * * * * python /home/pi/serveur.py > /ou/tu/veux 2>&1

    Comme ça tu verrais un peu plus d'ou vient ton erreur en inspectant le fichier.

    Cron qui n'arrive pas à lancer la commande bizarre.

    Mais juste une question comment tu sais que ton serveur reçoit le message?

  6. #6
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tabouret Voir le message

    Mais juste une question comment tu sais que ton serveur reçoit le message?
    Car dés réception de message du client il répond et je reçois sur l'application client le retour du serveur par message c'est pour cela que je n'arrive pas à voir ou est le problème

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    Il fait quoi exactement ton serveur.py?
    Il ouvre une socket attend un peu puis ferme la socket et ce toutes les minutes?
    Je trouve bizarre que ton client arrive à communiquer avec ton serveur alors qu'il ne se réveille que toutes les minutes.

    Limite envoie le code de ton serveur.py ce sera plus simple.

  8. #8
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tabouret Voir le message
    Il fait quoi exactement ton serveur.py?
    Il ouvre une socket attend un peu puis ferme la socket et ce toutes les minutes?
    .
    Le serveur attend la connexion du client puis il exécute un script qui permet de lancer le moteur
    Serveur :
    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
    26
    import socket
     
    hote = ''
    port = 12800
     
    connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion_principale.bind((hote, port))
    connexion_principale.listen(5)
    print("Le serveur écoute à présent sur le port {}".format(port))
    connexion_avec_client, infos_connexion = connexion_principale.accept()
     
    printf("communication")
    cmd=os.open("./lance.sh")
    oss=cmd.read()
    printf(oss)
     
    msg_recu = b""
    while msg_recu != b"fin":
        msg_recu = connexion_avec_client.recv(1024)
     
        print(msg_recu.decode())
        connexion_avec_client.send(b"Fini")
     
    print("Fermeture de la connexion")
    connexion_avec_client.close()
    connexion_principale.close()

  9. #9
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    D'accord je viens de comprendre mais pour quelle raison exactement tu veux lancer ton serveur en tâche Cron et non en continue via un while(true) en tant que daemon?

    Parce que la je vois deux problèmes :
    • Si tu reçois deux messages client pendant la première minute, le deuxième ne sera visiblement pas pris en compte
    • Cron lance ton serveur la première minute, ne reçoit aucun message et reste en attente. Bim la deuxième minute Cron lance encore une instance de ton serveur qui va être en écoute sur le même port que ton premier serveur.


    Quand il s'agit de client/serveur, ou bien tu fais tourner ton serveur en continue (en tant que daemon/service, appel ça comme tu voudra) ou bien tu appel systemd à la rescousse et tu fais comme je t'ai dis plus haut.

  10. #10
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    Bonjour
    Je voudrai que mon serveur reste à l'écoute en continue jusqu'à réception d ordre c'est vrais que mon serveur se lance à chaque minute mais je ne sais pas trop comment intégrés cette boucle pour que mon serveur écoute une seul fois jusqu'à réception d ordre puis se relance sans devoir ce lancer a chaque minute :/ dsl mais je viens de débuter en programmation et en pi
    Merci

  11. #11
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    Re bonjour,
    la j'ai réussi à débloquer une partie en ajoutant a la fin de la commande cron la redirection de log j'ai réussi à faire tourner le moteur ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      * * * * *  python /home/pi/serveur.py 2>&1 | logger -t mycmd
    Maintenant faut que je lance un deuxième script cad un 2eme serveur pour l’arrêt du moteur à distance sur un autre port d’écoute qui fait lancer un python pour l’arrêt du moteur aussi j'ai rajouter la meme commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      * * * * *  python /home/pi/serveur_arret.py 2>&1 | logger -t mycmd
    mais ici ya un problème des fois la commande fonctionne le moteur s’arrête mais faut pas des le premier coup cad quand je lance le client ça ne fonctionne pas proprement et quand je regarde les message de cron quand l’arrêt ne se lance pas il met ça comme msg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh: 1: ./arret.sh: not found
    bisard parce que si j'insiste en lançant plusieurs fois le client arrêt ça marche mais du premier lancement ça ne marche pas

  12. #12
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    Franchement si tu veux mon avis oubli Cron et oubli de faire plusieurs serveurs.

    Fais juste un seul serveur qui écoute sur un port et tu gère ton moteur et tes requêtes clientes dedans.

  13. #13
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    Le problème c'est que dans mon application je suis obliger de lancer deux client indépendantisme pour commander le moteur car derrière dans mon application ya d'autre traitement à faire qui exige ceci de faire les deux indépendamment

  14. #14
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Tout ceci est incroyablement brouillon.

    • On n'utilise pas Cron pour attendre une commande serveur.
    • L'attente de la fin de la commande pour en relancer une est le comportement par défaut.
    • Le fait de lancer 2 serveurs n'a rien à voir avec le sujet initial.
    • Pour qu'une commande soit lancée en arrière plan, on ajoute une esperluette à la fin.


    En ce qui concerne la relance automatique du serveur, tu peux faire quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rm -f /tmp/mon_arret.txt
    while [ ! -s /tmp/mon_arret.txt ]
    do 
        python /home/pi/serveur.py 2>&1 | logger -t mycmd
    done
    Le serveur se relancera jusqu'à ce que tu mettes quelque chose dans le fichier /tmp/mon_arret.txt par des commandes comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo toto >/tmp/mon_arret.txt
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  15. #15
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    En ce qui concerne la relance automatique du serveur, tu peux faire quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rm -f /tmp/mon_arret.txt
    while [ ! -s /tmp/mon_arret.txt ]
    do 
        python /home/pi/serveur.py 2>&1 | logger -t mycmd
    done
    Le serveur se relancera jusqu'à ce que tu mettes quelque chose dans le fichier /tmp/mon_arret.txt par des commandes comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo toto >/tmp/mon_arret.txt
    Bonjour, j'ai changer un peu les tache en arriere plan j'ai mis ms deux serveur dans un meme fichier .sh puis je lance ce fichier .sh en tache cron
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * pi /home/pi/essai.sh 2>&1 | logger -t mycmd
    et ça marche bien j'arrive a commander le demarrage et l'arret par contre j'aime bien ton code pour la boucle car moi je voudrai que mes serveur reste en ecoute instantanément mais dans mon cas il faut attendre chaque minute pour relancer donc ce bout de code faut le rajouter dans ma tache cron ? sans présicer les champs * * * * * ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rm -f /tmp/mon_arret.txt
    while [ ! -s /tmp/mon_arret.txt ]
    do 
        python /home/pi/serveur.py 2>&1 | logger -t mycmd
    done
    merci

  16. #16
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    Franchement oubli Cron pour un serveur on ne lance jamais un serveur via Cron mais avec

    comme ce qui vient d'être dit juste au-dessus) et ton serveur tourne en continue en arrière-plan ou alors via systemd mais je pense que tu peux oublier pour le moment systemd.

    Fais un seul serveur qui gère toute les requêtes entrantes.

    Fais une boucle infinie qui va :
    • Attendre une requête
    • Regarder de quel type de requête il s'agit (commande moteur arrêt moteur arrêt serveur...)
    • En fonction de la requête exécuter telle ou telle fonction

  17. #17
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    il faut attendre chaque minute
    Il faut attendre chaque minute parce que tu t'obliges à attendre chaque minute.
    Arrête d'utiliser Cron et tout sera facile.
    Cron est inutile et inadéquat dans ton cas.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  18. #18
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    Bonjour à tous merci pour vos conseils la j'arrive a lancer mes serveur en arriere plan en boucle infinie exactement comme je voulais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while true;do
    python2 /home/pi/serveur.py & 
    sleep 5
    done
    dans un script, maintenant j'aimerai savoir si systemd permet de lancer ce script juste une fois au lancement de mon raspberry
    merci à vous

  19. #19
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    C'est exactement ce que je voulais éviter.
    Faire une boucle infinie est de la mauvaise programmation.
    Aucun programme n'est fait pour tourner à l'infini.
    J'avais, à ce titre, asservi la fin de boucle à une commande extérieure.

    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  20. #20
    Membre à l'essai
    Femme Profil pro
    université
    Inscrit en
    Mars 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : université

    Informations forums :
    Inscription : Mars 2017
    Messages : 48
    Points : 13
    Points
    13
    Par défaut
    lol oui je viens de remarquer aussi que la pi deviens lourd mais dans cette boucle quand je l'ai essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while [ ! -s /tmp/mon_arret.txt ]
    il reconnais pas la commande ! code erreur not found

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Impossible de lancer une tache en CRON
    Par Tonii dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 06/08/2014, 16h18
  2. Problème d'execution d'une tache cron
    Par Jarod23 dans le forum Administration système
    Réponses: 2
    Dernier message: 20/03/2007, 10h19
  3. Lancer une tache de fond
    Par irenee dans le forum Administration système
    Réponses: 2
    Dernier message: 22/12/2006, 11h24
  4. Creer une tache cron
    Par zulot dans le forum Serveurs (Apache, IIS,...)
    Réponses: 8
    Dernier message: 24/09/2006, 22h12
  5. Problème pour lancer une tâche de fond
    Par jessie dans le forum Administration système
    Réponses: 3
    Dernier message: 12/02/2006, 19h50

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