Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/01/2020, à 12:00

CopCoben

[Résolu] Fonction pause dans un script shell et envoi de mail

Bonjour à tous,
Je me trouve confronté à un petite difficulté.

Je tourne sur Ubuntu 18.04LTS.

Il me sert principalement de serveur multimédia.

J'ai un script lancé par cron qui tourne toutes le nuits et synchronise d'une part un serveur distant sur mon disque dur, et ensuite réplique ce disque dur sur un deuxième.
A la fin de la sauvegarde il m'envoie par mail une copie du log pour que je sache ce qui a été fait.

Jusque là ça tourne très bien.

J'ai voulu intégré la mise en veille du serveur (mon local) après la'fin de la réplication par un

systemctl suspend


Il met bien le serveur en hibernation, mais du coup je n'ai plus de mail.
Normal je me suis dit car il envoit le log d'execution lorsque le script s'est entièrement terminé.

J'ai donc mis la commande systemctl suspend dans un deuxième script qui est appellé par le premier.

Mais toujours pas de mail.... Même si j'intègre un sleep juste avant le suspend....

De temps en temps le mail est envoyé quan je sors de l'hibernation....

Auriez vous des idées ?

Merci d'avance.

(je peux au besoin mettre mes script l

Dernière modification par CopCoben (Le 10/01/2020, à 11:05)


Linux version 5.3.0-51-generic (buildd@lgw01-amd64-018) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #44~18.04.2-Ubuntu
Linux Mint 19.3 Tricia

Hors ligne

#2 Le 07/01/2020, à 13:31

Watael

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

salut,

il est long le script ? on peut le voir en entier ?
ou au moins la commande mail.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 07/01/2020, à 15:00

MicP

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

CopCoben a écrit :

…Auriez vous des idées ?…

Oui, plein.

Hors ligne

#4 Le 07/01/2020, à 23:07

CopCoben

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

big_smile merci
desolé pour le retard mais je viens de rentrer.......
Le script n'est pas long, je ne sais pas comment le mettre ici, je vais le mettre comme ligne de code.
Soyez indulgents my lords, je ne sais pas coder........
j'ai retirer quelques lignes concernant les commandes rsync, je ne pense pas que cela apporte grand chose.

#!/bin/bash




## VARIABLES & FONCTION MAIL
	# Répertoire de stockage des logs
	LOGDIR="/homeXXX/Scripts/Log/"
	# Email pour les erreurs (0 pour désactiver)
	EMAIL=moi@gmail.com
	# Log de sortie & erreurs
	exec &> ${LOGDIR}/BackupServeurOut.log
	

	# Fonction mail
	function cleanup {
		if [ "$EMAIL" != "0" ] ; then
			cat ${LOGDIR}/BackupServeurOut.log | mail -s "BCKP Server Rapport" ${EMAIL}
		else
			echo "Rapport mail désactivé"
		fi
	}
	trap cleanup EXIT

### SCRIPT

                echo "###### OCCUPATION Data1 le $(date +%d/%m/%Y) à $(date +%H:%M:%S) ######"                

df -H /media/benoit/Data1
   
		echo "###### DEBUT DE LA COPIE SUR FRACTAL le $(date +%d/%m/%Y) à $(date +%H:%M:%S) ######"
rsync -rtlupzgoD --partial -v -e "ssh -p x" admin@xx.xx.xx:/home/userdl/xxx/series/ /media/xxx/Data1/Multimedia/Series

		echo "###### FIN DE LA COPIE SUR FRACTAL le $(date +%d/%m/%Y) à $(date +%H:%M:%S) ######"
                 echo "###### OCCUPATION Data1 le $(date +%d/%m/%Y) à $(date +%H:%M:%S) ######"                

df -H /media/benoit/Data1

                echo "###### Mise en veille le $(date +%d/%m/%Y) à $(date +%H:%M:%S) ######"

/home/Documents/Scripts/shutdown.sh

le script envoyé en fin de script est celui qui permet de faire la mise en veille, le voici

#!/bin/bash

sleep 10
        
systemctl suspend

je pensais qu'avec le sleep cela permettrait de laisser le temps d'envoyer le log par mail du script 1.........


Linux version 5.3.0-51-generic (buildd@lgw01-amd64-018) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #44~18.04.2-Ubuntu
Linux Mint 19.3 Tricia

Hors ligne

#5 Le 07/01/2020, à 23:17

Watael

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

trap capture le signal de fin de script pour envoyer le mail.
or, la fin du script est après le shutdown.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 07/01/2020, à 23:20

CopCoben

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

ok mais avec le deuxieme script (qui fait le shutdown), le cript 1 devrait envoyé le mail avant le shutdown non? surtout avec un sleep?


Linux version 5.3.0-51-generic (buildd@lgw01-amd64-018) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #44~18.04.2-Ubuntu
Linux Mint 19.3 Tricia

Hors ligne

#7 Le 07/01/2020, à 23:34

Watael

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

la fonction est exécutée à la fin du script1, après l'exécution du script2.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 07/01/2020, à 23:40

CopCoben

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

si je te comprends bien, vu que script 1 exécute script 2, il attend que script 2 se termine avant de se terminer lui aussi.....
c'est ballot ca.......
donc je peux faire comment alors moi pour que le mail me soit envoyé avant que le serveur hiberne?


Linux version 5.3.0-51-generic (buildd@lgw01-amd64-018) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #44~18.04.2-Ubuntu
Linux Mint 19.3 Tricia

Hors ligne

#9 Le 08/01/2020, à 00:18

Watael

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

fait exécuter la fonction (une fonction est-elle alors réellement utile?) avant le suspend !

Dernière modification par Watael (Le 08/01/2020, à 00:18)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 08/01/2020, à 08:54

CopCoben

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

Donc deux solutions : soit je mets le Trap à la fin de mon script, juste avant le suspend, soit je vire la fonction (qui effectivement n'est pas très utile) et je cale l'envoie de mail juste avant le suspend et shutdown.
Mais dans ce cas là le mail sera quand même envoyé même si le script n'est pas fini ? (étant donné que le mail envoie le logo du script)
Merci pour tes réponses en tout cas.


Linux version 5.3.0-51-generic (buildd@lgw01-amd64-018) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #44~18.04.2-Ubuntu
Linux Mint 19.3 Tricia

Hors ligne

#11 Le 08/01/2020, à 10:50

CopCoben

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

Je pensais à une autre solution : apparemment la fonction Trap (que je découvre) attend un signal. Peut on du coup mettre le suspend dans la fonction Trap avec comme signal l'envoie effectif du mail ?


Linux version 5.3.0-51-generic (buildd@lgw01-amd64-018) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #44~18.04.2-Ubuntu
Linux Mint 19.3 Tricia

Hors ligne

#12 Le 08/01/2020, à 11:55

kamaris

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

Pour que le montage décrit en #4 fonctionne, il faut que tu lances l'exécution de /home/Documents/Scripts/shutdown.sh en arrière plan :

/home/Documents/Scripts/shutdown.sh &

Hors ligne

#13 Le 08/01/2020, à 12:33

Watael

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

mais pourquoi utilises-tu trap ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 08/01/2020, à 19:15

CopCoben

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

apparement mon dernier message n'est pas parti...;
@kamaris : pour executer en arrière plan il suffit de mette "&" en fin de ligne? En arrière plan cela signifie quoi exactement? Le script shutdown tourne en meme temps? Est ce qu'il attend la fin de l'execution du script 1 pour se terminer?
@Watael : ne sachant pas coder j'ai pris des bouts de code a droite a gauche. mais effectivement je n'ai pas besoin de cette fonction. je vais tester en enlevant la fonction. Est il possible de ne realiser le shutdown (ou le lancement du script 2) QUE si le mail est effectivement envoyé?


Linux version 5.3.0-51-generic (buildd@lgw01-amd64-018) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #44~18.04.2-Ubuntu
Linux Mint 19.3 Tricia

Hors ligne

#15 Le 08/01/2020, à 19:37

kamaris

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

CopCoben a écrit :

@kamaris : pour executer en arrière plan il suffit de mette "&" en fin de ligne? En arrière plan cela signifie quoi exactement? Le script shutdown tourne en meme temps? Est ce qu'il attend la fin de l'execution du script 1 pour se terminer?

Oui, oui, non : smile

man bash a écrit :

If a command is terminated by the control operator &, the shell executes the command in the background in a subshell. The shell does not wait for the command to finish, and the return status is 0.

Hors ligne

#16 Le 09/01/2020, à 12:11

Watael

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

ce n'est pas si facile de savoir si un mail a effectivement été envoyé.
après quelques recherches, il semble falloir parcourir le journal du serveur pour retrouver la trace du mail, qui indique le statut de l'envoi...

Dernière modification par Watael (Le 10/01/2020, à 20:04)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#17 Le 10/01/2020, à 11:07

CopCoben

Re : [Résolu] Fonction pause dans un script shell et envoi de mail

Bon en fait j'ai viré la fonction Trap et mis une commande d'envoie de mail simple juste avant un sleep de 60 secondes et suspend.
Pour le moment ça fonctionne, même si c'est pas hyper propre.
Merci à Watael et Kamaris.


Linux version 5.3.0-51-generic (buildd@lgw01-amd64-018) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #44~18.04.2-Ubuntu
Linux Mint 19.3 Tricia

Hors ligne