Partage
  • Partager sur Facebook
  • Partager sur Twitter

rtcwake coince dans un script bash

    1 septembre 2019 à 16:36:10

    Salut les forumeurs, alors voila je suis un newbie en programmation et j'ai récemment commencé à m'intéresser à l'info en profondeur avec les très bon cours de Mathieu Nebra "Reprenez le contrôle à l'aide de linux !"

    Je suis donc sous Ubuntu 18.04 LTS et j'ai créé un petit script shell afin de pouvoir mettre en hibernation mon pc portable et le faire se réveiller le lendemain à une heure précise, voici le code https://github.com/matteosev/script_arret/blob/master/arret.sh.

    Tout le script se déroule très bien jusqu'à la DERNIERE ligne, malheureusement la plus importante.

    L'invite de commande me renvoie ça :

    rtcwake: assuming RTC uses UTC ...
    rtcwake: wakeup from "disk" using /dev/rtc0 at Sun Sep  1 22:00:00 2019
    
    

    et ma machine se met en veille : normal sauf que comme vous pouvez le voir le réveil est programmé à 22:00:00 le jour même alors que je l'ai réglé à 07:00 le lendemain par défaut ! (écrit dans le code)

    J'ai cherché une solution mais je n'ai pas trouvé alors je me tourne vers vous en espérant que vous saurez éclairer ma lanterne :D

    Le script est un peu long alors je remercie d'avance tous ceux qui auront pris la peine d'y jeter un coup d'oeil.

    • Partager sur Facebook
    • Partager sur Twitter
      1 septembre 2019 à 23:55:35

      Bonjour,

      Règle d'or en Bash: toujours mettre ses variables entre doubles quotes! (sauf si tu sais exactement pourquoi tu as besoin de ne pas les encadrer de doubles quotes, ce qui est très rare). De plus, généralement, ce qui délimite chaque argument d'une commande, c'est un ou des espaces. Tu dois donc écrire:

      rtcwake --date "$jour-$mois-$annee $heure"

      Le reveil est programmé à 22h car rtcwake le programme à 00h par défaut quand aucune heure est donnée. Et comme indiqué par le retour, rtcwake utilise le fuseau UTC par défaut. Je suppose que tu es à UTC+2 en fuseau horaire (minuit - 2h = 22h). ;)

      Au-delà de ça, je pense que ton script peut-être simplifié:

      $ date
      Sun 01 Sep 2019 11:17:41 PM CEST
      $ date --date="tomorrow"
      Mon 02 Sep 2019 11:17:55 PM CEST
      $ date --date="22 tomorrow"
      Mon 02 Sep 2019 10:00:00 PM CEST
      $ date --date="11"
      Sun 01 Sep 2019 11:00:00 AM CEST
      

      En bref, date est un programme très complet, je te conseil d'y jeter un œil avec man date et info date :)

      Il semblerait que rtcwake permet aussi de donner un format de date future similaire (+11 hours, tomorrow). Tu peux simplifier le programme en calculant uniquement la durée de mise en veille et rtcwake la traduira en date automatiquement par exemple.

      Et les années bissextile ont une petite subtilité: https://fr.wikipedia.org/wiki/Ann%C3%A9e_bissextile#R%C3%A8gle_actuelle

      • Partager sur Facebook
      • Partager sur Twitter
        2 septembre 2019 à 13:36:31

        Merci pour ta réponse KoaTao,

        Ok autant pour moi pour la règle d'or je la connaissais pas, tant mieux j'suis la pour apprendre :D

        j'ai donc modifié mon script comme tu me l'as recommandé et voilà le résultat

        rtcwake: assuming RTC uses UTC ...
        rtcwake: wakeup from "disk" using /dev/rtc0 at Tue Sep  3 05:00:00 2019

        Nickel c'est exactement ce que je voulais ^^

        Mais du coup ce que tu me dis dans la deuxième partie de ton message c'est que j'ai un peu fais tout ça pour "rien"  puisqu'il aurait suffi que je regarde le man de date plus en détail :colere:ça m'apprendra (encore une fois).

        -
        Edité par MatteoSeverini 4 septembre 2019 à 8:44:31

        • Partager sur Facebook
        • Partager sur Twitter
          2 septembre 2019 à 15:10:12

          Bonjour,

          Dans un sens pratique, oui tu t'es cassé la tête pour rien.

          Après, on dit souvent qu'il ne faut pas essayer de réinventer la roue. Mais c'est bien de temps en temps de comprendre comment elle fonctionne :)

          On s'améliore en pratiquant. En soi, faire un calendrier (avec les années bissextiles, toussa toussa) est un exercice courant lorsqu'on débute en prog. Ton script s'en rapproche! ^^

          Et t'inquiète, on écrit tous des scripts pour se rendre compte qu'une solution plus simple était sous nos yeux, ça fait partie de l'apprentissage!

          -
          Edité par KoaTao 2 septembre 2019 à 15:12:06

          • Partager sur Facebook
          • Partager sur Twitter

          rtcwake coince dans un script bash

          × 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