Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Bash] Soustraction d'heures

Sujet résolu
    3 juillet 2019 à 13:22:34

    Bonjour à tous,

    J'ai déjà été voir des topics parlant de ce sujet mais aucun ne répondait vraiment à mes interrogations.

    Je veux faire un script bash qui lance un 'telnet Y.Y.Y.Y >monFichier1' pendant X heures (variable paramétrable) puis au bout de ces X heures il s’arrête puis en relance un autre avec une redirection dans un autre fichier.

    J'ai vu comment trouver le temps écoulé depuis l'heure 00, la minute 00 etc. mais je n'ai pas trouvé comment faire un

    HEURE=$($DATE +'%T')
    
    while [true]
       while [TempsEcoule<3h]
          telnet Y.Y.Y.Y > monFichier1
      TempsEcoule=0
    
       while [TempsEcoule<3h]
          telnet Y.Y.Y.Y > monFichier2
    TempsEcoule=0


    C'est à dire arrêter le telnet au bout de X heures pour en relancer un nouveau.

    Ici, il manque donc le calcul de 'TempsEcoule'

    Merci d'avance

    EDIT:

    Pour faire avec des secondes:

    #! /bin/bash
    end=$((SECONDS+3))
    
    while [ $SECONDS -lt $end ]; do
        # Do what you want.
        :
    done

    ( https://stackoverflow.com/questions/11176284/time-condition-loop-in-shell )

    -
    Edité par Romain29r 3 juillet 2019 à 14:25:58

    • Partager sur Facebook
    • Partager sur Twitter
      3 juillet 2019 à 18:56:30

      je plussoie l'emploi de $SECONDS
      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        4 juillet 2019 à 9:02:48

        En effet c'est une bonne solution à priori, néanmoins je n'arrive pas à résoudre mon problème.

        Je veux faire un telnet durant X secondes.

        Ce telnet se connecte sur un 'PC' puis récupère un flux de données constant. Je veux récupérer ce flux de données pour l'écrire dans un fichier

        Deux solutions me viennent à l'esprit:

             Boucle

        while [ $SECONDS -lt $end ]; do
           telnet ...
        :
        done

        ou faire un

        timeout 5 telnet ...

        Le problème de la 1 ère solution est que mon script ne s’arrête jamais.

        Le problème de cette 2ème solution est que quand je le fais dans mon script, il n'écris pas tout.

        Je m'explique.

        Quand je fais dans la console: 'timeout 5 telnet X.X.X.X YYYY >>monFichier1.txt'

        ça fonctionne bien, mes données sont écrites dans le fichier durant 5 secondes, parfait.

        MAIS

        si je fais cette commande dans mon script, il va bien tourner 5 secondes mais le contenu de mon fichier texte est:

        Trying X.X.X.X...
        Connected to X.X.X.X.
        Escape character is '^]'

        Autrement dit, il se connecte bien mais n'écris pas le flux de données, je ne comprends pas d'où cela pourrait venir...

        Merci d'avance!



        -
        Edité par Romain29r 4 juillet 2019 à 9:04:38

        • Partager sur Facebook
        • Partager sur Twitter
          4 juillet 2019 à 9:33:25

          je ne comprends : dans cette "configuration", telnet peut envoyer des messages, mais pas en recevoir

          dans un terminal, on crée un "serveur" en écoute (Listening) pour l'exemple :

          $ nc -vl localhost 1234
          Listening on [localhost] (family 10, port 1234)
          Connection from localhost 58170 received!
          

          et dans un autre terminal, on se connecte au "serveur"  avec telnet :

          $ telnet localhost 1234
          Trying ::1...
          Connected to localhost.
          Escape character is '^]'.
          du texte
          ^]
          telnet> quit
          $


          le terminal "serveur" reçoit bien "du texte", puis le serveur se ferme quand on interrompt la connexion telnet.

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

            4 juillet 2019 à 9:44:33

            Oui, je parle bien de "recevoir" du texte. Je me connecte à un Moxa qui affiche des données en continu. Je veux récupérer ses données pour les écrire dans un fichier.

            Mais je n'arrive pas à rediriger le flux pendant un laps de temps dans un fichier.

            Faire les 3 en même temps ne fonctionne pas.

            • Partager sur Facebook
            • Partager sur Twitter
              4 juillet 2019 à 9:51:24

              je parle bien de "recevoir" du texte.

              telnet (GNU inetutils) 1.9.4 n'en est pas capable.

              quelle version utilises-tu ?

              • Partager sur Facebook
              • Partager sur Twitter

              Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                4 juillet 2019 à 10:00:08

                Je dois mal m'exprimer, quand je dis "recevoir du texte", c'est "écouter" et donc récupérer le flot de données qui est émis en redirigeant la sortie

                "telnet @IP Port >> fichier.txt"

                • Partager sur Facebook
                • Partager sur Twitter
                  4 juillet 2019 à 10:05:08

                  j'ai bien compris.

                  le man de la version que j'ai indiquée dit :

                  DESCRIPTION
                         Login to remote system HOST (optionally, on service port PORT)


                  peut donc envoyer (Login to), pas recevoir.

                  quelle version utilises-tu ?

                  -
                  Edité par dantonq 4 juillet 2019 à 10:06:01

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                    4 juillet 2019 à 10:10:49

                    Je

                    ne vois pas la version dans le man :euh:

                    La description:

                    The telnet command is used for interactive communication with another host using
                         the TELNET protocol. It begins in command mode, where it prints a telnet prompt
                         ("telnet> "). If telnet is invoked with a host argument, it performs an open
                         command implicitly; see the description below.



                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 juillet 2019 à 10:47:26

                      essaie telnet --version

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                        4 juillet 2019 à 10:54:10

                        dantonq a écrit:

                        essaie telnet --version


                        déjà essayé mais ne fonctionne pas, j'ai regardé le manuel mais pas de trace de commande permettant de voir la version...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 juillet 2019 à 12:11:21

                          et dans la description du paquet ?
                          d'ailleurs, quel gestionnaire de paquets ?

                          et,
                          quel OS ? quelle version ? quel type d'installation ?

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                            4 juillet 2019 à 14:03:58

                            Je suis sur un Linux 7.8 (Wheezy) avec Aptitude en gestionnaire de paquets à priori
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 juillet 2019 à 15:42:48

                              Linux 7.8, ça n'existe pas.

                              tu veux dire GNU Linux/Debian 7.8, aka Wheezy.
                              Debian est réputée être stable; 7.8 (alors qu'ils en sont à la version 9.9), ce n'est plus de la stabilité, c'est de l'archaïsme. ;)

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                                5 juillet 2019 à 8:11:59

                                dantonq a écrit:

                                Linux 7.8, ça n'existe pas.

                                tu veux dire GNU Linux/Debian 7.8, aka Wheezy.
                                Debian est réputée être stable; 7.8 (alors qu'ils en sont à la version 9.9), ce n'est plus de la stabilité, c'est de l'archaïsme. ;)

                                Sur ce point ce n'est pas moi qui choisi, là où je bosse c'est comme ça :lol:
                                J'ai essayé plusieurs autre chose concernant mon problème mais ça ne fonctionne pas.

                                Il s’embrelait que la commande expect soit intéressante dans mon cas mais c'est un paquet à installer, et sur mon lieu de travail c'est difficile d'installer des nouveaux paquets :ninja:

                                J'espère réussir à trouver une solution plus "classique"!

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  8 juillet 2019 à 8:33:47

                                  Du coup j'ai utilisé NetCat au lieu de Telnet car le fonctionnement de Telnet est assez moyen dans ce cas de figure.

                                  -
                                  Edité par Romain29r 8 juillet 2019 à 8:33:54

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  [Bash] Soustraction d'heures

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown