Debian Debian-France Debian-Facile Debian-fr.org Debian-fr.xyz Debian ? Communautés

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 23-01-2022 17:17:14

Maknho
Membre
Distrib. : Debian GNU/Linux 11
Noyau : Linux 5.10.0-10-amd64
(G)UI : Xfce
Inscription : 01-06-2020

Premier script => premières difficultés

Bonjour à tous,

mon problème est assez simple j'essaie de faire mon premier script pour automatiser mes sauvegardes rsync (a) le rsync b) l'envoi du log par mail c) utilisation de crontab).

Avant de me lancer j'ai fait un script test pour tester : a) la création des logs ; b) l'envoi de mail périodiques.

Ci-dessous le script de test avec la commande du -sh qui est ici anecdotique :

#!/usr/bin/env bash

echo ------------ Script test ------------------------
echo ------------ commande testee --------------------
du -sh /net/2to_serveur/10_Materiels_elec_multimedia/Sauvegardes_importantes &> /net/2to_serveur/Telechargements_2to_serveur/test_logs/$(date +%Y%m%d_%H_%M_%S)_test.log
echo ------ fin test commande -----------------------
echo --- RAPPORT ---
echo - Rapport envoyé @ $(date +%d-%m-%y_%H:%M:%S)
echo 'Subject:' "commande testee" | cat - "/net/2to_serveur/Telechargements_2to_serveur/test_logs/$(date +%Y%m%d_%H_%M_%S)_test.log" | sendmail -r moi@modomaine moi@gmail.com 
echo - Rapport réalisé @ $(date +%d-%m-%y_%H:%M:%S)

Plusieurs questions :
a) #!/usr/bin/env bash => le shebang si j'ai bien compris, utile dans mon cas vu que mon shell est zsh
b) j'ai compris que &> "redirecting both stdout and stderr" (http://mywiki.wooledge.org/BashGuide/In … nipulation) mais y-a-t-il une subtilité qui ferait que j'aurai intérêt à utiliser autre chose ?
c) le mail est bien envoyé, avec l'output de la commande cat dans le corps du mail, mais je ne pense pas que, utiliser dans l'avant dernière ligne du script $(date +%Y%m%d_%H_%M_%S)_test.log pour chercher le fichier que la commande CAT doit examiner, est toujours fonctionnel. En effet (date +%Y%m%d_%H_%M_%S) pourrait être décalé de quelques secondes/minutes (par exemple pour rsync c'est sûr) et la commande CAT ne trouverait pas de fichier à examiner ?
d) et accessoirement comment numéroter chaque ligne (avec nano ou autres)

Pouvez-vous m'éclairer sur les bonnes pratiques à respecter pour ce script basique (log d'une commande et envoi du log dans le corps du message d'un  mail) ?

D'avance merci beaucoup

J'ai tenté un :
36  dernier_log_cree=cd /chemin_dossier_log ; ls -1t | head -1
37  echo 'Subject:' "Rsync N2+ 2to et 5to" | cat $dernier_log_cree | sendmail -r mail_envoi mail_destination

Mais ça ne marche pas sad

Dernière modification par Maknho (23-01-2022 20:13:05)

Hors ligne

#2 23-01-2022 21:16:38

Croutons
Membre
Distrib. : Debian10 Buster
Noyau : Linux 4.19.0-18-amd64
(G)UI : Mate
Inscription : 16-12-2016

Re : Premier script => premières difficultés

Hello

36  dernier_log_cree=cd /chemin_dossier_log ; ls -1t | head -1



pour stocké le résulat des commandes dans ta variable

 dernier_log_cree=$(cd ~/Téléchargements/ ; ls -1t | head -1)



d) et accessoirement comment numéroter chaque ligne (avec nano ou autres)


cat -n
nano -l


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#3 23-01-2022 22:06:30

nlancien
Membre
Distrib. : Debian Stable
Noyau : Linux 4.19.0-12-amd64
(G)UI : Openbox
Inscription : 17-07-2019

Re : Premier script => premières difficultés

Il y a aussi un utilitaire dédié a la numérotation de lignes :

nl

Hors ligne

#4 23-01-2022 22:52:03

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Premier script => premières difficultés

Hello,

Pour la question de la date, sauvegarde sa valeur une fois dans une variable et utilise la variable.
Par exemple :

#!/usr/bin/env bash

quand=$(date +%Y%m%d_%H_%M_%S)
echo "------------ Script test ------------------------"
echo "------------ commande testee --------------------"
du -sh /net/2to_serveur/10_Materiels_elec_multimedia/Sauvegardes_importantes &> /net/2to_serveur/Telechargements_2to_serveur/test_logs/${quand}_test.log
echo "------ fin test commande -----------------------"
echo "--- RAPPORT ---"
echo "- Rapport envoyé @ $(date +%d-%m-%y_%H:%M:%S)"
echo 'Subject:' "commande testee" | cat - "/net/2to_serveur/Telechargements_2to_serveur/test_logs/${quand}_test.log" | sendmail -r moi@modomaine moi@gmail.com
echo "- Rapport réalisé @ $(date +%d-%m-%y_%H:%M:%S)"



Autre chose : utilise les balises "code" pour poster du .... code tongue
L'exemple ci-dessus, c'est code=bash.


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#5 24-01-2022 08:38:13

Maknho
Membre
Distrib. : Debian GNU/Linux 11
Noyau : Linux 5.10.0-10-amd64
(G)UI : Xfce
Inscription : 01-06-2020

Re : Premier script => premières difficultés

Croutons a écrit :


pour stocké le résulat des commandes dans ta variable

 dernier_log_cree=$(cd ~/Téléchargements/ ; ls -1t | head -1)



Merci Croutons,

je teste et je reviens sur le forum ; je pense que c'est ce que je recherchais smile

Merci Tawal, j'utiliserai la balise code pour poster.

Et merci à nlancien et Croutons pour la numérotation.

Hors ligne

#6 24-01-2022 16:12:55

Maknho
Membre
Distrib. : Debian GNU/Linux 11
Noyau : Linux 5.10.0-10-amd64
(G)UI : Xfce
Inscription : 01-06-2020

Re : Premier script => premières difficultés

@Croutons

j'ai modifié ainsi le script rsync

dernier_log_cree=$(cd /chemin/du/log/ ; ls -1t | head -1)
echo 'Subject:' "Rsync N2+ 2to et 5to" | cat $dernier_log_cree | sendmail -r mail@envoi mail@reception



Résultats :
- Rsync se passe bien ;
- le log est bien mis dans le bon fichier avec la bonne denomination 20220124_15_10_09_rsync_N2+_2to_et_5to.log ;
- le mail est bien envoyé
- MAIS le retour indique :

cat: 20220124_15_10_09_rsync_N2+_2to_et_5to.log: Aucun fichier ou dossier de ce type



Ou est mon erreur ?

Merci bcp pour votre aide

Hors ligne

#7 24-01-2022 16:27:28

Croutons
Membre
Distrib. : Debian10 Buster
Noyau : Linux 4.19.0-18-amd64
(G)UI : Mate
Inscription : 16-12-2016

Re : Premier script => premières difficultés

ta variable ne contient pas le chemin juste le nom du fichier , si tu fais un cat sans que le chemin soit spécifier ça le fait pas , a moins d'etre dans le bon répertoire

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#8 24-01-2022 16:39:29

Maknho
Membre
Distrib. : Debian GNU/Linux 11
Noyau : Linux 5.10.0-10-amd64
(G)UI : Xfce
Inscription : 01-06-2020

Re : Premier script => premières difficultés

@Croutons

Pourtant dans la variable ci-dessous je mets bien le chemin du fichier non ?

dernier_log_cree=$(cd /chemin/du/log/ ; ls -1t | head -1)



Ah non attends je corrige.

dernier_log_cree=$/chemin/du/log/(cd /chemin/du/log/ ; ls -1t | head -1)



Comme ça c'est bon ?

EDIT : ça marche avec le code suivant

dernier_log_cree=/chemin/du/log/$(cd /chemin/du/log/ ; ls -1t | head -1)



Merci @Croutons

Dernière modification par Maknho (24-01-2022 16:53:49)

Hors ligne

#9 24-01-2022 23:18:57

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Premier script => premières difficultés

Re,

Je n'avais pas critiqué Croutons dans son exemple, mais

dernier_log_cree=$(cd ~/Téléchargements/ ; ls -1t | head -1)


est pas beau et pas fiable (à cause de ls qu'on n'utilise pas dans un script).
Je ferais (même si c'est moche) :

find /chemin/du/dossier/log  -type f -name ".*rsync.*.log" -exec sh -c 'stat -c "%W %n" "$@" | sort -nrk1 | head -1' sh '{}' \+


C'est plus costaud en résultat, mais c'est limité en nombres de fichiers log total et je sais plus combien ...


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#10 25-01-2022 10:22:35

Croutons
Membre
Distrib. : Debian10 Buster
Noyau : Linux 4.19.0-18-amd64
(G)UI : Mate
Inscription : 16-12-2016

Re : Premier script => premières difficultés

Ah oui çà c'est de la ligne en longueur , j'y ai pas tout compris big_smile
c'est sur comme tu dis avec ta variable quand ça le fait mieux

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#11 25-01-2022 11:34:13

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Premier script => premières difficultés

En fait, ma dernière commande renvoie un retour du genre :

16258894 /chemin/nom_du_fichier


En voici une autre qui ne renvoie que le nom du fichier dernier à être créer :

find /chemin/du/dossier/log  -type f -name ".*rsync.*.log" | awk '{com="stat -c %W \""$0"\""; com | getline t; close(com); if (t>m){m=t; f=$0}}; END{print f}'

Dernière modification par Tawal (25-01-2022 11:34:45)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#12 25-01-2022 15:08:07

Maknho
Membre
Distrib. : Debian GNU/Linux 11
Noyau : Linux 5.10.0-10-amd64
(G)UI : Xfce
Inscription : 01-06-2020

Re : Premier script => premières difficultés

Tawal a écrit :

C'est plus costaud en résultat, mais c'est limité en nombres de fichiers log total et je sais plus combien ...



Merci beaucoup Tawal, je vais essayer ça aussi...mais à la décharge de Croutons c'est moi qui avait proposé la commande avec ls smile

Dernière modification par Maknho (27-01-2022 10:39:58)

Hors ligne

#13 25-01-2022 15:08:39

Maknho
Membre
Distrib. : Debian GNU/Linux 11
Noyau : Linux 5.10.0-10-amd64
(G)UI : Xfce
Inscription : 01-06-2020

Re : Premier script => premières difficultés

Tawal a écrit :

En voici une autre qui ne renvoie que le nom du fichier dernier à être créer :



Ok je viens de voir ton message

Hors ligne

#14 25-01-2022 15:39:27

Croutons
Membre
Distrib. : Debian10 Buster
Noyau : Linux 4.19.0-18-amd64
(G)UI : Mate
Inscription : 16-12-2016

Re : Premier script => premières difficultés

en passant une petite astuce quand j'utilise des variables , je fais toujours un echo $nom_de_ma_variable
histoire d’être sur qu'il y ait bien ce que je veux dedans
car étant débutant moi même rien n'est jamais sur , j'ai souvent de belle surprise lol

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#15 26-01-2022 01:03:03

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Premier script => premières difficultés

Oui les "echo var=$var" sont utiles pour déboguer.
Il y a aussi "bash -x script" pour voir le déroulement du script.

Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#16 26-01-2022 09:17:05

Maknho
Membre
Distrib. : Debian GNU/Linux 11
Noyau : Linux 5.10.0-10-amd64
(G)UI : Xfce
Inscription : 01-06-2020

Re : Premier script => premières difficultés

Croutons a écrit :

en passant une petite astuce quand j'utilise des variables , je fais toujours un echo $nom_de_ma_variable
histoire d’être sur qu'il y ait bien ce que je veux dedans
car étant débutant moi même rien n'est jamais sur , j'ai souvent de belle surprise lol



Alors merci beaucoup @Croutons ; c'est vraiment le type d'astuce dont je suis très très "demandeur", en tant que débutant.

Cela permet d'avancer pas à pas...et de contruire petit à petit smile

Il y a aussi "bash -x script" pour voir le déroulement du script.



@Tawal et encore merci beaucoup Tawal ; je ne connaissais pas, bien sûr smile

@Tawal : je n'ai pas encore testé ta ligne de code car j'aimerai, même très vaguement, comprendre ce que j'écris...mais quand mes deux jeunes fils m'en laisse le temps je m'y mets smile

Hors ligne

#17 26-01-2022 11:02:49

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Premier script => premières difficultés

find /chemin/du/dossier/log  -type f -name ".*rsync.*.log" : Trouver tous les fichiers dans /chemin/du/dossier/log avec un nom contenant ".....rsync....log"

| : passer le résultat de find à awk

awk '{com="stat -c %W \""$0"\""; com | getline t; close(com); if (t>m){m=t; f=$0}}; END{print f}' :
   - com="stat -c %W \""$0"\"" : construction de la commande "stat -c %W "nom_du_fichier_log""
   - com | getline t; close(com) : on met son résultat dans la variable t
   - if (t>m){m=t; f=$0} : si t>m alors m=t et f=nom_du_fichier_log
   - END{print f} : une fois tout fini, afficher f (nom_du_fichier_log ayant le plus grand nombre de secondes en date de création)

Pas sûr d'être très clair.

Dernière modification par Tawal (26-01-2022 11:10:09)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

Pied de page des forums