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 11/12/2022, à 04:41

king76

Vérifier ses backups fichiers + mySQL

Bonjour,

J'ai un serveur Ubuntu 22.04 au bureau avec une base de données mySQL et un script PHP.

J'ai un petit script en ligne de commande que j'ai trouvé sur internet qui est exécuté depuis le cron tous les jours à minuit. On parle d'un backup qui prend 2mn à faire, 20Mo pour le MySQL et 400Mo pour les fichiers.

Il y a une copie qui est maintenue sur 5 jours. Le script dépose le tout sur un partage réseau Samba qui pointe vers un serveur Windows qui garde des copies (le système de backup normal de Windows Serveur) puis j'ai un programme qui prend les données du dossier et les synchronisent dans Microsoft 365. Bref autant dire que y'a des backup de backup au cas où.

Sauf que la dernière fois par hasard j'ai regardé dans le dossier et ça faisait 10 jours que le backup ne s'était pas lancé !

Le soucis c'est que je suis le seul à m'occuper de ce système et je vais quitter mon emploi, je voudrais m'assurer au moins que des copies se fassent si jamais ils doivent restaurer des données.

De (1) je ne sais pas ce qui a pu se passer. Le cron a du chier mais comment savoir ? Il faudrais que je fasse un système de log ? qui envoie le résultat de la commander dans un fichier >> /home/user/monscript.log

De (2), je cherche comment monter un système qui pourrait vérifier qu'il existe un fichier en date d'aujourd'hui, du genre à minuit et demie je vérifie si y'a un fichier et si ce n'est pas le cas j'envoie un courriel au boss !

Si je n'ai pas confiance au cron, ça m'embête de tout miser la dessus. Je me demande si je ne devrais pas faire un script sur le serveur Windows qui ferait ce processus de vérification, mais il faudrait coder ça en DOS et avoir un serveur de mail dessus.

Bref, quelle autre solution j'aurais d'après vous ? Faire un autre script sur le même serveur qui est lancé 10mn après, mais est ce logiciel de compter sur le système défaillant pour vérifier le problème? À moins que le problème ne venait du script.

Merci

Hors ligne

#2 Le 11/12/2022, à 09:30

bruno

Re : Vérifier ses backups fichiers + mySQL

Bonjour,

Un script doit s'interrompre et renvoyer une erreur lorsqu'une commande ou instruction échoue.
Une tâche cron envoie par courriel à l'adresse indiquée dans la configuration les retours du script appelé.

Hors ligne

#3 Le 11/12/2022, à 12:07

soshy

Re : Vérifier ses backups fichiers + mySQL

Les services et timers systemd c'est plus fiable que cron, en plus ça permet d'avoir des logs d'exécution.

Perso, j'utiliserai plutôt ça que cron.

Hors ligne

#4 Le 11/12/2022, à 13:50

bruno

Re : Vérifier ses backups fichiers + mySQL

Les timers systemd ne sont pas plus fiables et surtout  ne permettent pas d'envoyer automatiquement un courriel avec les retours du script lancé.

Hors ligne

#5 Le 11/12/2022, à 14:52

soshy

Re : Vérifier ses backups fichiers + mySQL

C'est plus fiable parce que si pour une raison x ou y une exécution est manquée (reboot en cours alors qu'on aurait dû déclencher la tache par exemple) il peut la rattraper. C'est plus fiable parce qu'on peut spécifier au service d'avoir des dépendances pour s'exécuter (attendre que le réseau doit dispo, la base de données etc.). C'est plus fiable parce qu'on peut déclencher la tâche manuellement à l'identique que lors de son exécution planifiée. Je ne compte plus le nombre de post où un script fonctionne lancé par l'utilisateur et pas dans un cron à cause des problèmes de user, path etc.

La configuration permet plus de choses, et des choses basiques comme une trace d'exécution, heure de dernière et prochaine exécution sont fournies de base. Il est très simple aussi d'y d'exporter les traces d'execution vers des fichiers, et l'envoi de mail en cas d'erreur est tout à fait possible. Je vois pas l'intérêt de se faire polluer de mail en cas de succès du script.

La conf d'un timer est un peu plus verbeuse qu'un cron, mais infiniment plus puissante.

Dernière modification par soshy (Le 11/12/2022, à 14:55)

Hors ligne

#6 Le 11/12/2022, à 15:05

king76

Re : Vérifier ses backups fichiers + mySQL

Salut,

Donc ce que je comprend c'est qu'il serait souhaitable que je modifie le script pour prévoir l'envoi d'un mail en cas d'erreur. Sauf que ça demande de connaître un peu le Bash pour réécrire des bouts du code ou trouver sur Github un nouveau script qui prévoit ce mécanisme.

Pour configurer l'envoi de mail sur mon serveur, je peux utiliser cette technique d'après vous ? https://www.cyberciti.biz/tips/linux-us … thost.html

Concernant le MAILTO dans le crontab, ça va envoyer un log du script tous les jours à minuit ? Ça ne m'aidera pas à savoir si le script ne s'est pas lancé par contre ? Car c'est certain que mon boss s'il reçoit un mail tous les jours, un moment donné s'il le reçoit plus, il va l'oublier, je préférerais qu'il reçoit un seul mail en cas de pépin.

La première des choses ce serait de garder un log d'exécution du script, soit en envoyant le résultat dans un fichier texte, soit en regardant dans un log déjà prévu à cet effet, comme celui ci peut être ? /var/log/syslog ?

La deuxième chose ce serait de modifier le script pour prévoir toutes les erreurs possible (problème d'écriture dans le dossier, problème d'accès à la base de données et d'envoyer un mail.

Troisième solution, faire un autre script qui vérifie si le fichier a bien été généré.

Merci

Hors ligne

#7 Le 11/12/2022, à 15:35

king76

Re : Vérifier ses backups fichiers + mySQL

@soshy nos messages ce sont croisés.
J'ai été voir ton lien, ça à l'air plus complexe que le crontab ton système mais si ça peut me permettre de seulement recevoir un mail en cas d'erreurs ça pourrait m'intéresser.

Toutefois, comment ça peut détecter une erreur? Par exemple si le script n'arrive pas à se connecter à la base de données, et s'il passe à l'autre ligne pour copier les fichiers ne pourra pas le savoir ?

Merci

Hors ligne

#8 Le 11/12/2022, à 15:59

bruno

Re : Vérifier ses backups fichiers + mySQL

Oui une tâche cron est beaucoup plus simple pour l'instant qu'un timer systemd auquel il faut rajouter un service systemd et un script d'envoi de courriel.

Pour ton script il suffit qu'il revoie quelque chose en cas d'erreur sur STDERR.

Pour que la tâche cron n'envoie un courriel uniquement en cas d'erreur il suffit de rediriger STDOUT vers /dev/null.

Mais bon je ne vais pas écrire le code à ta place, ni à celle de ton boss qui te fait bosser le dimanche wink

Hors ligne

#9 Le 14/12/2022, à 15:59

king76

Re : Vérifier ses backups fichiers + mySQL

Hello les gars,

Je suis de retour pour une séance de déboggage !

Mon dernier backup c'est fait le 11 décembre à 19h (hmmm, c'est censé se faire à minuit, bref, problème de GMT sur le serveur j'imagine), mais celui du 12 décembre rien du tout, celui du 13 non plus.

Je me rends compte qu'en allant là où se trouve le script c'est-à-dire : /media/windows/_BDD/Backup/Backup.sh, le partage samba sur /media/windows/ n'était plus monté ! Je fais mes backups sur un autre serveur et j'ai aussi mis le script sur ce même serveur pour pouvoir le modifier sans avoir à connaitre le mot de passe du serveur Linux, bref.

Donc, pour une raison que j'ignore le montage samba a planté ! Je fais un uptime et je vois que le serveur est lancé depuis justement 2 jours et des poussières.... oups cela coincide avec une coupure de courant qu'on a eu ce weekend. Le serveur a donc planté et quand il a redémarré le montage via le fstab n'a pas marché, sans doute parce que le serveur Windows était pas encore opérationnel. Comment résoudre ça ?

J'ai regardé dans les logs de /var/log/syslog et pour le 11 décembre, je n'ai pas trouvé grand chose à minuit, car le log commence justement à miniuit et des poussières :

Dec 11 00:00:01 papyrus-prod systemd[1]: rsyslog.service: Sent signal SIGHUP to main process 739 (rsyslogd) on client request.
Dec 11 00:00:01 papyrus-prod systemd[1]: logrotate.service: Deactivated successfully.
Dec 11 00:00:01 papyrus-prod systemd[1]: Finished Rotate log files.

Mais le lendemain :

Dec 13 00:00:01 papyrus-prod CRON[3991]: (root) CMD (/media/windows/_BDD/Backup/backup.sh > /dev/null)
Dec 13 00:00:01 papyrus-prod CRON[3989]: (CRON) info (No MTA installed, discarding output)
Dec 13 00:00:01 papyrus-prod CRON[3993]: (scriptcase) CMD (/media/windows/_BDD/Backup/backup.sh > /dev/null)
Dec 13 00:00:01 papyrus-prod systemd[1]: Starting Daily dpkg database backup service...
Dec 13 00:00:01 papyrus-prod systemd[1]: Starting Rotate log files...
Dec 13 00:00:01 papyrus-prod CRON[3990]: (CRON) info (No MTA installed, discarding output)
Dec 13 00:00:01 papyrus-prod systemd[1]: dpkg-db-backup.service: Deactivated successfully.
Dec 13 00:00:01 papyrus-prod systemd[1]: Finished Daily dpkg database backup service.
Dec 13 00:00:01 papyrus-prod systemd[1]: Reloading The Apache HTTP Server...
Dec 13 00:00:01 papyrus-prod apachectl[4022]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Dec 13 00:00:01 papyrus-prod systemd[1]: logrotate.service: Deactivated successfully.
Dec 13 00:00:01 papyrus-prod systemd[1]: Finished Rotate log files.
Dec 13 00:00:01 papyrus-prod systemd[1]: Reloaded The Apache HTTP Server.

On ne voit rien concernant un problème d'accès au fichier Backup.sh ? Pourquoi ? Je vois des termes comme "Starting rotate log files..." ce n'est pas en lien avec mon script, surement autre chose.

Donc si je reviens à mon problème initiale, si le partage samba est pas présent, mon script ne peut pas partir ce qui est logique. Je pourrais essayer de commencer par régler ca. Ajouter dans mon script une vérification si le partage est présent et envoyer un courriel si c'est pas le cas ? Ou m'arranger pour remonter le partage avant de lancer le script avec un "mont -a" au début du script ?

Merci

Hors ligne

#10 Le 14/12/2022, à 16:49

bruno

Re : Vérifier ses backups fichiers + mySQL

Ton script est au plus mauvais endroit possible. Place-le, par exemple, sur le serveur dans /usr/local/sbin.

Dernière modification par bruno (Le 14/12/2022, à 16:50)

Hors ligne

#11 Le 14/12/2022, à 20:54

inbox

Re : Vérifier ses backups fichiers + mySQL

Salut,

Sur cette page sont indiqués comment procéder à un montage de partages réseau. La note concernant systemd semble intéressante.

A+


Un problème résolu ? Indiquez le en modifiant le titre du sujet.

Hors ligne

#12 Le 14/12/2022, à 22:26

king76

Re : Vérifier ses backups fichiers + mySQL

@bruno, ça ne changera pas le fait que si le partage réseau n'est pas connecté, les fichiers ne pourront pas être déposés. J'ai ajouté un "mount -a" en avant du script si ça peut déjà aider.

@inbox, j'avais suivi ce tuto justement, est-ce qu'il y a une solution pour vérifier périodiquement et monter le partage plus tard si ce dernier n'est plus effectif ?

Hors ligne

#13 Le 15/12/2022, à 07:55

bruno

Re : Vérifier ses backups fichiers + mySQL

Si cela changera puisque tu pourras ajouter dans ton script une ligne qui teste si ton partage Samba est monté et renvoie une erreur le cas échéant.

Hors ligne

#14 Le 15/12/2022, à 14:05

king76

Re : Vérifier ses backups fichiers + mySQL

Ahhh oui merde alors tu as 100% raison! Comment je peux monter un partage si le script est pas rejoignable oups.

Ce que je vais faire même c'est de déposer les fichiers sur le serveur Linux et envoyer une copie sur le partage Windows, comme ça j'aurais au moins un backup sur Linux.


Merci

Dernière modification par king76 (Le 15/12/2022, à 14:07)

Hors ligne