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 :

Envoyer des données en HTTP POST ?


Sujet :

Shell et commandes GNU

  1. #21
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Après avoir testé manuellement la ligne de commande, je l'ai placé dans mon rc.local pour que le programme se lance au démarrage.

    Mais depuis, elle ne semble plus marcher.

    J'avais essayé en manuel sans le & final, j'essaie donc maintenant sans celui-ci dans le rc.local.

    Si vous avez une idée de la cause de mon problème...

    Merci,
    ZiP

  2. #22
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 284
    Points : 12 736
    Points
    12 736
    Par défaut
    Tu nous dis que tu dois tout lancer sur une seule ligne de commande et maintenant tu mets ça dans ton rc.local.
    Si je ne m'abuse, on met des scripts dans le rc.local ?

    Au lieu d'essayer de faire fonctionner cette "horreur" non maintenable dans ton rc.local, tu ferais mieux d'essayer de faire un script propre en suivant le modèle de N_BaH auquel il suffit de rajouter la fameuse boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    adrSite="htpp://..."
    while read toPost
    do
    curl -d "$toPost" "$adrSite"
    done < <(cmd1 | cmd2...)
    Ou alors encore plus propre:
    créer une fonction (pour l'exemple, on l'appellera "func1", qui englobe la partie "(cmd1|cmd2...)".
    puis le script ressemblera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
    func1(){
    cmd1| cmd2....
    ...
    }
    adrSite="htpp://..."
    func1 | while read toPost
    do
    curl -d "$toPost" "$adrSite"
    done
    Ton premier sed peut avantageusement être remplacer par un grep -v.
    Ton deuxième sed, tu pourrais aussi l'écrire sous forme de script sed encapsulé avec une commande sed par ligne
    Cordialement.

  3. #23
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Cette deuxième discussion est la suite de celle-ci :
    http://www.developpez.net/forums/d13...-fonctionnent/

    A l'époque, nous avions eu beaucoup de difficultés à faire fonctionner le tout.
    C'est pourquoi tout a été fait en une seule ligne de commande.

    Je mets cette ligne dans mon rc.local pour que la commande se lance automatiquement au démarrage de mon Raspberry Pi.

    Je vais essayer de pousser un peu plus mes investigations ce soir pour comprendre pourquoi en ligne de commande via PuTTY celle-ci fonctionne et pas dans le rc.local.
    La cause du problème devrait être trouvée facilement.

    Je suis ouvert à une simplification de celle-ci mais je ne suis pas sûr que ça fonctionne.

    Merci,
    ZiP

  4. #24
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 284
    Points : 12 736
    Points
    12 736
    Par défaut
    Mouais,

    Et dans un an, tu vas encore vouloir la modifier et elle sera encore de plus en plus illisible.

    Sinon, pour ton problème, peux-tu nous envoyer le contenu de ton rc.local ?

    Et ne nous dis pas qu'il n'y a que la ligne en question, car il doit posséder au moins une ligne avant elle (en général, on l'appelle shebang)...
    Cordialement.

  5. #25
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par [ZiP] Voir le message
    Je vais essayer de pousser un peu plus mes investigations ce soir pour comprendre pourquoi en ligne de commande via PuTTY celle-ci fonctionne et pas dans le rc.local.
    La cause du problème devrait être trouvée facilement.
    À tout hasard, lorsqu'un script fonctionne sur une ligne mais pose des problèmes sur plusieurs, ça peut provenir de mauvais caractères de fin de ligne ou d'une dernière ligne non terminée par un LF.
    Vérifier avec "cat -A" ou "od -c"...

  6. #26
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    disedorgue, voici mon fichier rc.local :
    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
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.
     
    # Print the IP address
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
      printf "My IP address is %s\n" "$_IP"
    fi
     
    /usr/local/bin/rtl_fm -N -f XXX.XXXXM -s 22.05k -p XX | /usr/local/bin/multimon -a POCSAG512 -a POCSAG1200 -f alpha -t raw /dev/stdin | /bin/sed -u '/^POCSAG[0-9]\{3,4\}[+-]\{1\}: A/!d' | /bin/sed -u '/Address/N;s/POCSAG[0-9]\{3,4\}[+-]\{1\}: Address: \([ 0-9]\{7\}\).*POCSAG[0-9]\{3,4\}[+-]\{1\}: Alpha: \(.*\)/\&adresse=\1\&message=\2/;h;s/\(.*\)/\/bin\/date +"date=%d-%m-%y\&heure=%H:%M:%S"/e;G;s/\n//g' | /usr/bin/tee /home/pi/pocsag/`date +"%Y-%m-%d_%H%M%S"`.csv | { while read ; do /usr/bin/curl -d "$REPLY" http://www.monsite.com/mon_repertoire/mon_fichier.php ; done ;} &
     
    exit 0
    jack-ft : En fait, lancé à la main dans PuTTY, il marche alors que dans le fichier rc.local non.

    Est-ce que le problème pourrais venir du résultat de cURL qui affiche la réponse de mon script ?

    C'est à dire, des "OK" et qui poseraient problème via le rc.local ?

    Merci,
    ZiP

  7. #27
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 284
    Points : 12 736
    Points
    12 736
    Par défaut
    Bah,

    Ce qui me choc, c'est de mettre le process en background (ta grande ligne) et juste après, il y a un exit 0

    Est-ce que ton process tourne au moins (ce que je doute) ?
    Cordialement.

  8. #28
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Oui car cette ligne là fonctionne sans aucun problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/local/bin/rtl_fm -N -f XXX.XXXXM -s 22.05k -p XX | /usr/local/bin/multimon -a POCSAG512 -a POCSAG1200 -f alpha -t raw /dev/stdin | /bin/sed -u '/^POCSAG[0-9]\{3,4\}[+-]\{1\}: A/!d' | /bin/sed -u '/Address/N;s/POCSAG[0-9]\{3,4\}[+-]\{1\}: Address: \([ 0-9]\{7\}\).*POCSAG[0-9]\{3,4\}[+-]\{1\}: Alpha: \(.*\)/\&adresse=\1\&message=\2/;h;s/\(.*\)/\/bin\/date +"date=%d-%m-%y\&heure=%H:%M:%S"/e;G;s/\n//g' | /usr/bin/tee /home/pi/pocsag/`date +"%Y-%m-%d_%H%M%S"`.csv &
    Merci,
    ZiP

  9. #29
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Après vérification avec la ligne suivante dans mon ficher rc.local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/local/bin/rtl_fm -N -f XXX.XXXXM -s 22.05k -p XX | /usr/local/bin/multimon -a POCSAG512 -a POCSAG1200 -f alpha -t raw /dev/stdin | /bin/sed -u '/^POCSAG[0-9]\{3,4\}[+-]\{1\}: A/!d' | /bin/sed -u '/Address/N;s/POCSAG[0-9]\{3,4\}[+-]\{1\}: Address: \([ 0-9]\{7\}\).*POCSAG[0-9]\{3,4\}[+-]\{1\}: Alpha: \(.*\)/\&adresse=\1\&message=\2/;h;s/\(.*\)/\/bin\/date +"date=%d-%m-%y\&heure=%H:%M:%S"/e;G;s/\n//g' | /usr/bin/tee /home/pi/pocsag/`date +"%Y-%m-%d_%H%M%S"`.csv | { while read ; do /usr/bin/curl -d "$REPLY" http://www.monsite.com/mon_repertoire/mon_fichier.php ; done ;} &
    J'ai bien ça dans les processus :
    2116 ? 00:00:03 rtl_fm
    2117 ? 00:00:02 multimon
    2121 ? 00:00:00 sed
    2122 ? 00:00:00 sed
    2123 ? 00:00:00 tee
    Le fichier CSV est bien créé mais n'ai jamais renseigné.

    EDIT :
    J'ai essayé avec cette commande qui coupe la sortie de cURL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [...] | { while read ; do /usr/bin/curl --data "$REPLY" --url http://www.monsite.com/mon_repertoire/mon_fichier.php --output /home/pi/pocsag/curl.log --silent ; done ;} &
    Mais ça ne corrige pas le problème. Il n'est donc pas là.

    Merci,
    ZiP

  10. #30
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 284
    Points : 12 736
    Points
    12 736
    Par défaut
    Bon ok,
    J'ai bien peur que le problème en fait est la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/local/bin/multimon -a POCSAG512 -a POCSAG1200 -f alpha -t raw /dev/stdin
    Car il a besoin du /dev/stdin, mais je pense que depuis rc.local celui-ci est inopérant car il n'y a pas de terminal, si quelqu'un pouvait in/confirmer...
    Cordialement.

  11. #31
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour disedorgue,

    L'explication semble cohérente cependant, je ne sais comment contourner le problème.

    Merci,
    ZiP

  12. #32
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 284
    Points : 12 736
    Points
    12 736
    Par défaut
    Essaie quelque chose comme ceci (d'abord en direct, avant de le mettre dans rc.local):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/sh -e
     
    mkfifo /tmp/fifo_test 
    /usr/local/bin/rtl_fm -N -f XXX.XXXXM -s 22.05k -p XX >/tmp/fifo_test &
    /usr/local/bin/multimon -a POCSAG512 -a POCSAG1200 -f alpha -t raw /tmp/fifo_test | /bin/sed -u '/^POCSAG[0-9]\{3,4\}[+-]\{1\}: A/!d' | /bin/sed -u '/Address/N;s/POCSAG[0-9]\{3,4\}[+-]\{1\}: Address: \([ 0-9]\{7\}\).*POCSAG[0-9]\{3,4\}[+-]\{1\}: Alpha: \(.*\)/\&adresse=\1\&message=\2/;h;s/\(.*\)/\/bin\/date +"date=%d-%m-%y\&heure=%H:%M:%S"/e;G;s/\n//g' | /usr/bin/tee /home/pi/pocsag/`date +"%Y-%m-%d_%H%M%S"`.csv | { while read ; do /usr/bin/curl -d "$REPLY" http://www.monsite.com/mon_repertoire/mon_fichier.php ; done ;} &
    Cordialement.

  13. #33
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour disedorgue,

    Le script se coupe à la détection d'un signal.

    Ça ne fonctionne donc pas.

    EDIT :
    Chaque ligne de commande lancée dans un PuTTY différent semble fonctionner une fois mais l'utilisation du fifo me fait perdre a notion de temps réel et le signal qui est décodé est totalement incompréhensible.
    Afin de contourner le problème, j'envisage d'enregistrer mes données dans un seul et unique fichier et de faire un script qui vient lire toutes les minutes les nouvelles lignes pour les envoyer vers le site internet.

    Merci pour ton aide,
    ZiP

  14. #34
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 284
    Points : 12 736
    Points
    12 736
    Par défaut
    Que cela ne fonctionne que pour une ligne à chaque fois, c'est normal...
    Par contre, je ne comprends pas que le flux ne soit pas compréhensible.

    Le problème, c'est que je ne peux pas tester avec les vraies commandes, donc je ne donne que des pistes à explorer.

    En voici une autre à tester pour ce passer de /dev/stdin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/sh -e
     
    mkfifo /tmp/fifo_test 
    /usr/local/bin/rtl_fm -N -f XXX.XXXXM -s 22.05k -p XX | tee /tmp/fifo_test | /usr/local/bin/multimon -a POCSAG512 -a POCSAG1200 -f alpha -t raw /tmp/fifo_test | /bin/sed -u '/^POCSAG[0-9]\{3,4\}[+-]\{1\}: A/!d' | /bin/sed -u '/Address/N;s/POCSAG[0-9]\{3,4\}[+-]\{1\}: Address: \([ 0-9]\{7\}\).*POCSAG[0-9]\{3,4\}[+-]\{1\}: Alpha: \(.*\)/\&adresse=\1\&message=\2/;h;s/\(.*\)/\/bin\/date +"date=%d-%m-%y\&heure=%H:%M:%S"/e;G;s/\n//g' | /usr/bin/tee /home/pi/pocsag/`date +"%Y-%m-%d_%H%M%S"`.csv | { while read ; do /usr/bin/curl -d "$REPLY" http://www.monsite.com/mon_repertoire/mon_fichier.php ; done ;} &
    Cordialement.

  15. #35
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir disedorgue,

    Je comprends tout à fait que le fait de ne pas pouvoir tester ne vous permet pas de m'aider dans les meilleures conditions.

    Cette dernière solution ne fonctionne pas non plus.

    Merci,
    ZiP

  16. #36
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 284
    Points : 12 736
    Points
    12 736
    Par défaut
    As-tu une version de multimon plus récente que celle que tu utilisais dans ton premier post de l'année dernière ?
    Parce-qu'a priori, elle supporte le pipeline sans un passage par /dev/stdin:
    Could you paste the actual command you were using? The version of multimonNG I have packaged doesn’t support standard input via pipe. Instead you can have it read from “/dev/stdin”. The latest version does support getting piped into and I will include it with the next bundle.
    Cordialement.

  17. #37
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour disedorgue,

    Non, j'utilise la même version.

    Il n'indique pas de version quand on le lance :
    multimonNG (C) 1996/1997 by Tom Sailer HB9JNX/AE4WA
    (C) 2012 by Elias Oenal
    Merci,
    ZiP

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/07/2007, 18h31
  2. Envoyer des données POST à une page web puis récupérer l'URL
    Par Ze moi dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 23/04/2007, 17h18
  3. Envoyer des données par post sans formulaire
    Par webrider dans le forum Langage
    Réponses: 12
    Dernier message: 31/03/2007, 19h11
  4. Réponses: 4
    Dernier message: 03/05/2006, 18h23
  5. Envoyer des données POST à une page !
    Par wishmastah dans le forum Langage
    Réponses: 11
    Dernier message: 11/04/2006, 19h37

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