Journal Idle Do, un script pour faire tourner des commandes quand l'ordinateur est inactif

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
37
3
jan.
2021

Pour éviter de perdre mes photos en cas d'incendie ou de vol, j'ai décidé de les sauvegarder sur AWS Deep Glacier. C'est très bon marché (20 centimes par mois pour ~150 Go) et sans doute assez écologique puisque les fichiers sont stockés hors ligne (il faut plusieurs jours pour les restaurer)

C'est super, mais nous sommes en 2021 et mon bled n'est toujours pas couvert par la fibre. Ce qui veut dire que j'ai 80Ko/s en upload les bons jours. Il faut donc un bon moment pour synchroniser mes photos quand j'en ajoute. Le problème, c'est que saturer l'upload ralentit énormément toute navigation.

J'ai donc eu l'idée de faire un petit script qui détecte si je suis derrière mon PC, et ne fait tourner l'upload que si je ne suis pas là. Ça marche super bien !

Je me dis que ça peut servir à d'autres, j'en ai donc fait un programme indépendant qui peut faire tourner n'importe quoi. Il suffit de préfixer sa commande avec mon programme :

idle_do.py commande_gourmande_en_resources [arguments...]

C'est plus un prototype qu'un truc vraiment abouti, mais ça marche. C'était aussi l'occasion d'utiliser dbus et logind (je suis sur Arch), et je dois dire que ça marche bien, notamment grâce à l'excellent pydbus.

Tout est là: https://github.com/joelthelion/idle_do

Comments welcome !

  • # Félicitations !

    Posté par  . Évalué à 10.

    Salut,

    C'est plus un prototype qu'un truc vraiment abouti

    Parfois, surtout si c'est sur son temps personnel, chercher la perfection est simplement un moyen de ne pas arriver au bout du projet ;)

    Donc bravo pour avoir fait cette version !

    Matricule 23415

    • [^] # Re: Félicitations !

      Posté par  (site web personnel) . Évalué à 8.

      Merci ! C'est vrai que c'est devenu plus difficile de finir des projets depuis la naissance des enfants :)

      • [^] # Re: Félicitations !

        Posté par  (site web personnel) . Évalué à 5.

        Mais du coup ça ne marche bien que si tu as un seul ordi. Idée d'extension : gérer plusieurs clients permettant de décider si l'ensemble du "parc" est idle ou non :)

        • [^] # Re: Félicitations !

          Posté par  (site web personnel) . Évalué à 3.

          Effectivement, c'est une grosse limitation. Mais dans ce cas, ce n'est plus du tout le même problème, et il faudrait sans doute avoir la main sur le routeur pour faire les choses bien. C'est tout à fait possible mais dans mon cas ma solution me suffit.

  • # sauvegardes

    Posté par  (site web personnel) . Évalué à 7.

    Je fais aussi mes sauvegardes sur aws, avec le même débit. De mon côté ça tourne la nuit.

    J'avais regardé les tarifs de glacier et de souvenir il y avait un coût non négligeable lié aux nombre de requêtes. Comme je fais un rclone chaque nuit sur un gros dossier je craignais que le nombre de requêtes soit trop élevé, du coup j'envoie tout sur S3. Ça me coûte environ un dollar par mois.

    Par rapport à ton script, que se passe-t-il quand tu reprends la main, la copie est en pause ? Interrompue ? Chiffres-tu tes données avant de les envoyer ?

    • [^] # Re: sauvegardes

      Posté par  (site web personnel) . Évalué à 7.

      Effectivement, les tarifs de Glacier (et d'AWS en général) sont un peu compliqués, et il faut faire attention aux coûts cachés. C'est en partie pour ça que je fais un simple aws s3 sync sur mon dossier photos: c'est simple et seuls les nouveaux fichiers sont transférés. Mais du coup, pas de chiffrement. Pour l'historique je le délègue à S3.

      Pour en revenir à mon script, je suspends tout simplement la copie quand le PC est actif avec un SIGSTOP (équivalent à un Ctrl-Z dans ton terminal si je ne me trompe pas), et je la relance quand il est inactif avec SIGCONT. Il y a parfois un timeout réseau lié à la durée d'inactivité, mais awscli s'en sort très bien et retombe sur ses pattes sans problème.

      • [^] # Re: sauvegardes

        Posté par  (site web personnel) . Évalué à 5.

        J'avais tenter de faire la même chose avec rclone sur OVH pour utiliser le chiffrement local des fichiers (leur nouveau serveur S3 public cloud). Mais impossible de configurer le truc. Est-ce une spécificité OVH ou est-ce que les CLI des clouds sont bien mieux foutu ?

        J'ai regardé finalement regardé https://www.pcloud.com qui semble bien plus simple. Qu'en pensez-vous ?

        "La première sécurité est la liberté"

        • [^] # Re: sauvegardes

          Posté par  (site web personnel) . Évalué à 2. Dernière modification le 04 janvier 2021 à 09:49.

          J'utilise OVH et leur "cold storage" avec duplicity en suivant leur guide et ça fonctionne. Faut juste s'assurer d'être dans la bonne version de l'application (qui n'est arrivée dans debian qu'assez récemment je crois).

        • [^] # Re: sauvegardes

          Posté par  . Évalué à 2.

          Quels sont les tarifs sur OVH ?
          Les seuls tarifs que j'ai trouvé sont "$0.045 /month/GB" ce qui est de l'ordre du facteur 30 par rapport à AWS Deep Glacier (les 0.2€ pour 150 GB).

          • [^] # Re: sauvegardes

            Posté par  (site web personnel) . Évalué à 5.

            Si l'on veut comparer avec AWS Deep Glacier, il faut regarder les tarifs du cloud archive :

            • Stockage : 0,002 € HT/mois/Go
            • Trafic entrant 0,01 € HT/Go
            • Trafic sortant 0,01 € HT/Go
        • [^] # Re: sauvegardes

          Posté par  (site web personnel) . Évalué à 1.

          Je l'utilise actuellement et cela marche.
          (tenant_key, user_key, pwd_key, password et password2 on été remplacés)

          mon fichier de conf rclone

          [OVH-Cloud]
          type = swift
          env_auth = false
          auth_version = 3
          auth = https://auth.cloud.ovh.net/v3/
          endpoint_type = public
          tenant_domain = default
          tenant = tenant_key
          domain = default
          user = user_key
          key = pwd_key
          region = SBG
          [OVH-Cloud-crypt]
          type = crypt
          remote = OVH-Cloud:mycloud-datas-sec
          filename_encryption = standard
          directory_name_encryption = true
          password = v6YwNNT55nnJ0C5l3gxutoMXN_gU
          password2 = Eud_hZcgdWhgmDwVXGxhz9yIg

          commande pour sauvegarder :

          rclone sync -v --fast-list --config="/etc/rclone.conf" --log-file="/tmp/rclone.txt" --contimeout=30s --transfers=2 /srv/hdd2t/mycloud-datas OVH-Cloud-crypt:mycloud-datas-sec

          pour restaurer :

          rclone sync -v --fast-list --config="/etc/rclone.conf" --log-file="/tmp/rclone.txt" --contimeout=30s --transfers=2 OVH-Cloud-crypt:mycloud-datas-sec /srv/hdd2t/mycloud-datas

          J'y suis arrivé en tâtonnant. Mais en gros on récupère un fichier rclone.conf depuis OHV ; puis à l'aide de "rclone config" on crée une entrée chiffrée qui as en "remote" l'entrée distante OVH.

    • [^] # Re: sauvegardes

      Posté par  . Évalué à 2.

      Comme je fais un rclone chaque nuit sur un gros dossier je craignais que le nombre de requêtes soit trop élevé, du coup j'envoie tout sur S3. Ça me coûte environ un dollar par mois.

      On peut avoir une idée du volume et de l'offre sélectionnée pour se faire un avis.

      Car mes photos/videos commencent à prendre pas mal de place. De l'ordre de 400Go :(

      • [^] # Re: sauvegardes

        Posté par  (site web personnel) . Évalué à 2.

        On peut avoir une idée du volume et de l'offre sélectionnée pour se faire un avis.

        Oui, rclone size me dit:

        Total objects: 15705
        Total size: 82.180 GBytes (88240142824 Bytes)
        

        Ce que confirme le tableau de bord sur AWS.

        La facture de décembre est de $1.09. Je ne crois pas avoir sélectionné d'option en dehors d'avoir créé un compte AWS. Ensuite j'ai créé le bucket, je l'ai mis en ue-west et pour la classe de stockage c'est « Unizone – Accès peu fréquent ».

  • # Super idée !

    Posté par  . Évalué à 5.

    Super idée, simple, efficace, le code est super lisible merci beaucoup !
    Reste plus qu'à l'implémenter en VHDL, Rust (bien sûr), ADA, Haskell…

  • # débit d'escargot, donc passer en 4G

    Posté par  (site web personnel) . Évalué à 7. Dernière modification le 04 janvier 2021 à 07:29.

    C'est super, mais nous sommes en 2021 et mon bled n'est toujours pas couvert par la fibre. Ce qui veut dire que j'ai 80Ko/s en upload les bons jours.

    et ton bled risque de ne pas être couvert de suite, c'est bien connu, le message "la fibre arrive l'an prochain dans votre commune" a tendance à se répéter pendant 10 ou 15 ans…
    :-)
    un routeur 4G, une carte SIM limitée à 100 GB par mois pour une vingtaine d'Euros ou moins, une visite sur cartoradio.fr pour voir où sont les antennes 4G les plus proches, et tu devrais avoir au moins du 20 ou 30 Mb/s, sauf si tu es au fond d'une vallée

    https://routeur4g.fr/

    pour plus de détails

    ウィズコロナ

  • # Question technique

    Posté par  (Mastodon) . Évalué à 4.

    Je me mets au Python depuis peu, alors je suis allé voir le code. Je pense avoir tout compris, sauf ceci, tu pourrais expliquer stp ?

    GLib.MainLoop().run()

    Merci !

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: Question technique

      Posté par  (site web personnel) . Évalué à 6.

      C'est une boucle d'évènements : en gros une boucle infinie qui va écouter les évènements en provenance de dbus et appeler ton code (dans notre cas la méthode handler de l'objet job) au besoin.

      • [^] # Re: Question technique

        Posté par  (Mastodon) . Évalué à 3.

        Ok. Du coup je suis passé par là pour avoir un plus d'infos (si ça peut servir à d'autres…)

        Merci !

        En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # Dbus ?

    Posté par  (site web personnel) . Évalué à 6. Dernière modification le 04 janvier 2021 à 16:29.

    Pourquoi être passé par DBUS pour savoir si le PC glande ?
    Je ne critique pas du tout, ça marche comme ça en donnant un code très court et clair.
    C'est juste par curiosité car je ne serais pas intuitivement passé par là, en grande partie parce que je n'y connais rien à DBUS (que je confonds toujours avec ce salopiot d'IBUS qui plante souvent). D'ailleurs, est-ce que DBUS est présent dans toutes les grandes distribs ? j'en sais même rien.
    A l'ancienne, j'aurais juste consulté /proc/avg si c'est un idle global, et un peu creusé /proc/net/dev s'il avait fallu regarder les débits réseaux.

    • [^] # Re: Dbus ?

      Posté par  (site web personnel) . Évalué à 9.

      Bonne question !

      En fait, je voulais quelque chose qui s'active quand je ne suis physiquement pas devant mon PC et pas spécialement quand le PC est inactif. Ça ne me dérange pas que la synchronisation soit active quand le PC est en train de faire autre chose en arrière-plan, ce qui arrive souvent chez moi.

      Et c'est exactement ce que logind propose : des évènements qui se déclenchent quand l'écran se met en veille ou que l'utilisateur verrouille sa session.

      DBus n'est que le moyen de s'abonner à ces évènements, et je dois dire que c'est assez chouette et que ça gagnerait à être connu. C'est beaucoup mieux il me semble de s'abonner à des évènements plutôt que de poller régulièrement des fichiers dans /proc/.

      • [^] # Re: Dbus ?

        Posté par  (site web personnel) . Évalué à 4. Dernière modification le 05 janvier 2021 à 17:56.

        Réponse super claire, qui décrit d'ailleurs mieux le besoin que le titre du journal.

        Du coup, le nom n'est peut-être pas très bien choisi, car en fait le cpu n'est pas forcément en idle, en fait la machine peut éventuellement être très occupée à faire mille et unes choses (envoyer 50000 mails, servir des pages web, …) que ça se déclencherait quand même, tant que tu n'es pas devant.

        Comme je ne suis pas doué pour les noms, je ne peux pas aider. Donc au pire tu laisses comme ça, au mieux tu fais un concours/sondage pour trouver un nom parfait pour cet outil qui "exécute une tache que tu ne saurais voir".

  • # Tuto glacier ?

    Posté par  (site web personnel) . Évalué à 2. Dernière modification le 06 janvier 2021 à 17:59.

    super outil et bonne idée pour l'utilisation de dbus ; le code est intéressant à lire.

    existe-t-il un tuto pour mettre en place une sauvegarde sur glacier ?

    j'en suis à l'étape : compte créé, regarde le dashboard avec les yeux écarquillés ;)

    • [^] # Re: Tuto glacier ?

      Posté par  . Évalué à 2.

      existe-t-il un tuto pour mettre en place une sauvegarde sur glacier ?

      Le plus facile est sûrement d'utiliser rclone. Et du coup, jeter un oeil à la doc rclone peut-être un bon début:

      https://rclone.org/s3/

      Mais c'est vrai que connaitre les bons paramètres serait cool…

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.