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 :

Déterminer historique script SH


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    test
    Inscrit en
    Mai 2016
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : test
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2016
    Messages : 346
    Par défaut Déterminer historique script SH
    bonjour

    Qu a une idée svp comment je peut vérifier si mon script *.sh il est entrain d’être exécuter ou il n'est pas

    aussi comment vérifier ou lire historique d’exécution d'un script SH

    merci pour vos aides

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    voir si il tourne : man ps & man grep

    typique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps -ef | grep -i scripname

    une bien meilleur pratique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #!/usr/bin/env bash
    touch /var/run/$0.$(date "+%Y%m%d-%H%M%S").$$.pid
    ....#contenu du script
    rm /var/run/$0.$(date "+%Y%m%d").$$.pid && exit 0
    la présence du pid indique donc que le script tourne et son heure de lancement

    si tu veux voir son exécution tu peux activer le mode debug de bash

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/usr/bin/env bash
    touch /var/run/$0.$(date "+%Y%m%d-%H%M%S").$$.pid
    set -x
    (
    ....#contenu du script
    ) > /var/log/$0.$(date "+%Y%m%d-%H%M%S").log
    set +x
    rm /var/run/$0.$(date "+%Y%m%d").$$.pid && exit 0
    quand il s’exécute tu peux suivre en live via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tail -F /var/log/$0.$(date "+%Y%m%d-%H%M%S").log
    ou le lire plus tard

  3. #3
    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
    Bonjour,

    touch n'est pas fait pour créer des fichiers.
    il le fait, mais son but premier est de modifier les dates des fichiers.

    pour créer un fichier sans commande externe, faites une simple redirection : > fichier.

    pourquoi créer un sous-shell avec les parenthèses ?
    des accolades groupent aussi les sorties, mais sans créer de sous-shell.

    attention, le fichier "pid" n'a pas le même format entre sa création du script, et sa suppression.
    de plus, la date peut avoir changé entre le début et la fin du script; la date devrait être stockée dans un variable.

    et puis, je ne suis pas fan de /usr/bin/env bash : si tu ne sais pas où est bash, peux-tu être sûr de l'emplacement de env ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    l'utilisation d'un verrou peut être une solution (c'est le même principe qu'expliqué plus haut), du coup il suffit de tester si le verrou (fichier ou mieux, répertoire) est présent pour être assuré que le programme est en cours d'exécution (et est tout seul à l'être), reste qu'il faut l'implémenter correctement http://mywiki.wooledge.org/BashFAQ/045

  5. #5
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Très intéressant l'explication du lien BufferBob.

    Pour le coup, je ne faisais pas comme il faut puisque je testais la présence d'un fichier.

    merci.

  6. #6
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    touch n'est pas fait pour créer des fichiers.
    il le fait, mais son but premier est de modifier les dates des fichiers.

    pour créer un fichier sans commande externe, faites une simple redirection : > fichier.

    pourquoi créer un sous-shell avec les parenthèses ?
    des accolades groupent aussi les sorties, mais sans créer de sous-shell.

    attention, le fichier "pid" n'a pas le même format entre sa création du script, et sa suppression.
    de plus, la date peut avoir changé entre le début et la fin du script; la date devrait être stockée dans un variable.

    et puis, je ne suis pas fan de /usr/bin/env bash : si tu ne sais pas où est bash, peux-tu être sûr de l'emplacement de env ?
    c'est bien sur qu'un schéma de principe mais oui tes remarques sont bonne sur l'ensemble

    sauf que > fichier n'est pas compréhensible par tout lecteur. et ne marche pas universellement sur tout unix-like contrairement à touch
    l'emplacement de env est normalement figé et appeler directement le shell sans passer par env fait partie des bad-practices même si j'aime pas trop non plus

  7. #7
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    sauf que > fichier n'est pas compréhensible par tout lecteur. et ne marche pas universellement sur tout unix-like contrairement à touch
    La bonne façon n'est elle pas ?
    Je crois que c'est universel contrairement à
    qui pourrait ne pas passer partout.

  8. #8
    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
    ne marche pas universellement sur tout unix-like
    je veux les noms ! ça dépend du shell, pas de l'OS.
    effectivement, tcsh ne reconnaît pas > fichier, mais bien : > fichier.

    l'emplacement de env est normalement figé
    "normalement", comme "presque partout" ?
    appeler directement le shell sans passer par env fait partie des bad-practices
    j'ai lu exactement le contraire. :/
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    attention, le fichier "pid" n'a pas le même format entre sa création du script, et sa suppression.
    de plus, la date peut avoir changé entre le début et la fin du script; la date devrait être stockée dans un variable.
    Je suis d'accord avec tout (évidemment), mais je stockerais carrément le nom du fichier (plutôt que la date) dans une variable.
    De cette manière, ça réduirait les risques de différence entre les 3 lignes qui référencent le nom du fichier (ça s'appelle de la factorisation )

Discussions similaires

  1. Déterminer si un script est exécuté par la crontab ou "à la main"
    Par _jey_ dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 16/10/2015, 11h27
  2. Script nettoyage des fichiers log + Temp + historique
    Par hackmed dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 21/05/2015, 14h26
  3. Déterminer la nature d'une commande au sein d'un script
    Par Marcsup dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 24/12/2013, 15h21
  4. Script qui détermine si un argument est numérique
    Par sk8trasher dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 14/03/2012, 14h25

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