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 :

Programmer des taches "cron"


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 9
    Par défaut Programmer des taches "cron"
    Bonjour,

    J'ai en projet d'utiliser un Raspberry pour commander une ou des électrovannes afin de gérer l'arrosage de mon jardin, y compris à distance.
    Je suis en cours d'écriture d'un programme python afin de créer une IHM sur mon PC qui, en fonction de mes actions, lancera des commandes sur mon Raspberry.

    Je pourrai certes lancer un programme sur le Raspberry prenant en compte les paramètres de l'IHM pour lancer l'arrosage et l'arrêter, mais comme il ne s'agit que d'une commande pour changer l'état d'une broche du GPIO, j'ai pensé qu'il serait plus élégant de passer par des tâches cron.

    Je sais recopier la crontab (crontab -l > mescrons), ajouter une tâche (echo "00 09 * * 1-5 echo hello" >> mescrons) et positionner le nouveau fichier (crontab mescrons), mais je galère à trouver une méthode pour retirer une tâche du fichier des cron.
    Je pense qu'il faut appliquer la même méthode en filtrant ce qui est recopier par la commande "crontab -l > mescrons" (je veux exclure les lignes comportant une "commande GPIO xxxx").

    Quelqu'un voit-il comment faire ? y-a-t-il une meilleure méthode ?

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Pourquoi faire simple quand on peut faire compliqué ?

    Un autre aurait sans doute fait crontab -e pour créer des nouvelles tâches qui n'appartiennent qu'à lui (pas de modification des tâches "admin").
    Et pour les retirer, il ajouterait certainement un croisillion "#" en début de ligne pour la transformer en commentaire.

    Je ne nie pas que ta démarche fonctionne mais je ne comprends pas pourquoi invoquer une telle complexité.

  3. #3
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 9
    Par défaut
    Bonjour et merci de te pencher sur mon cas.

    "crontab -e" aurait marché si j'étais en train de lancer la commande à la main et en agissant en mode interactif.
    Dans mon cas, c'est un programme en python qui lance les commandes via une connexion ssh. Donc cela bannit tout mode interactif.

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bon.

    Mais qu'est-ce qui ne marche pas ?

    Le test suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    crontab -l | sed '/les/d' | crontab -
    Le premier crontab sort la liste actuelle.
    Le sed supprime tous les cronjobs contenant "les". Tu pourrais mettre "GPIO", peut-être.
    Le deuxième crontab réinjecte le fichier texte modifié.

    Les lignes ont bien disparu.

    Ton premier message sous-entendait que c'était un ajout. Mais non : c'est un remplacement.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    le python ne peut pas faire ça, directement, sans sed ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 9
    Par défaut
    Le python est exécuté sur mon PC et les commandes sont exécutées sur le Raspberry, lancées via une commande ssh donc derrière c'est du shell.

    Faut que je teste le "sed"... mais écrit ainsi, ca ne fait pas encore le job...

    [Edit]
    J'avais mal testé, si c'est exactement la solution que je cherchais . Merci beaucoup.

    [Question subsidiaire]
    Et pour récupérer que les lignes contenant GPIO, quelle serait la commande ?

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut
    Et une fois que tout ton bazar électronique fonctionnera avec un programme aux petits oignons, tu te rendras compte, à l'usage, que des fois une électrovanne ne se ferme plus, ou au contraire ne s'ouvre pas, qu'une chute de pression fait que les têtes d'asperseurs ne sortent pas, que la pompe s'est désamorcée (fortes chaleurs --> forte dilatation des matériaux --> prises d'air...), que son système de déclenchement automatique foire parce que les contacts sont sous-dimensionnés, qu'une cochonnerie a bloqué en mode ouvert le clapet anti-retour du forage, j'en passe et j'en oublie...

    Tout ça en 25 ans d'utilisation : bon courage.

  8. #8
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 9
    Par défaut
    Ca sent le vécu mais ce n'est pas le sujet et je prends soin à bien choisir mon matériel. Par exemple je prendrai une électro vanne NF (normalement fermée) et il n' y ni pompe ni forage. Et pour une meilleure assurance, j'ai toujours un voisin apte à venir jeter un œil...

    Mon programme va aussi devoir analyser la programmation en cours afin de l'afficher dans l'IHM (sous une forme plus visuelle que la crontab), aussi j'ai besoin d'une commande capable de récupérer ligne par ligne celles qui contiennent la commande GPIO. Une idée ?

  9. #9
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Oui. Un simple grep suffit. Cela filtre les lignes. C'est la base.

    grep filtre un fichier texte.
    sed filtre et modifie un fichier texte.
    awk filtre, modifie, fait de l'arithmétique, à partir d'un fichier texte organisé en colonnes.
    Il y a encore d'autres outils spécifiques pour des objectifs spécifiques.

    Pour répondre directement à la question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    crontab -l | grep 'GPIO'
    À toi de mettre volontairement un motif dans ton cronjob qui identifie les tâches à récupérer.
    'GPIO' n'est pas une chaîne de caractères mais une regex ( = regular expression = expression régulière).

  10. #10
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 9
    Par défaut
    Oui effectivement c'était simple. Et merci beaucoup pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. automatisation des taches avec cron
    Par yabo84 dans le forum Administration système
    Réponses: 1
    Dernier message: 28/10/2012, 09h16

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