#1 Le 03/10/2015, à 15:17
- oliver2004
[Résolu] Mes scripts sh ne se lancent pas avec crontab...
Bonjour à tous,
Je mets en place quelques scripts supers simples de backups automatisés avec crontab mais rien à faire, ils ne se lancent apparemment pas alors que ces scripts fonctionnent lors des tests en ligne de commande...
Exemple de config crontab:
10 8 * * * /scripts/backup_bdd.sh
Ce script est le suivant:
#! /bin/sh
#
# Backup de la BDD
#
# On définit le nom du fichier
NOW=$(date +"%Y-%m-%d-%Hh%M")
nom_fichier=base_$NOW.sql
# On fait un mysqldump
mysqldump -uroot -ppasswd base > ~/db/base_db_backups/$nom_fichier
# On fait un zip du fichier pour upload
gzip -q9 --rsyncable ~/db/base_db_backups/$nom_fichier
# On efface les anciens fichiers
find ~/db/base_db_backups/ -type f -mtime +10 -exec rm -f {} \;
exit 0;
En ligne de commande, aucune erreur (il est bien exécutable, les chemins sont donc corrects, la base est donc bien dumpée et ensuite gzippée là où ça va bien).
Lors de chaque modification de crontab, je passe par crontab -e et lorsque je sors du fichier, le crontab se réinstalle sans problème. Ce qui est bizarre c'est que sur ce même crontab je lance des fichiers php qui eux s'exécutent normalement à l'heure voulue...
Pour le crontab j'ai également essayé avec ceci:
10 8 * * * sh /scripts/backup_bdd.sh
Mais rien à faire ça ne marche pas et c'est bien embêtant, je pars en voyage et mes backups ne vont pas se faire...
Une idée? Là, je sèche.
Dernière modification par oliver2004 (Le 04/10/2015, à 07:05)
Bureaux: Ubuntu Serveur Edition 18.04.4 LTS, Kubuntu, Xubuntu sur portables 18.04 LTS ou 20.04 LTS
Déjà 13 ans que toutes les machines sont LINUX dans mon entreprise...
Hors ligne
#2 Le 03/10/2015, à 16:34
- UbuntOlivier
Re : [Résolu] Mes scripts sh ne se lancent pas avec crontab...
Bonjour
Bête question, mais tu as bien ton répertoire /scripts à la racine de ton dd ? Ce n'est pas /home/user/scripts ou /root/scripts ? Je demande ça pcq ton crontab appelle /scripts/backup_bdd.sh, et qu'il est relativement rare que l'on crée un répertoire à la racine de son dd (mais ce n'est pas interdit !)...
Hors ligne
#3 Le 03/10/2015, à 16:41
- gl38
Re : [Résolu] Mes scripts sh ne se lancent pas avec crontab...
Tu as mis plusieurs ~, je me demande s'il ne faudrait pas les remplacer par le nom complet des fichiers.
Cordialement,
Guy
Hors ligne
#4 Le 03/10/2015, à 18:23
- jplemoine
Re : [Résolu] Mes scripts sh ne se lancent pas avec crontab...
Tu as mis plusieurs ~, je me demande s'il ne faudrait pas les remplacer par le nom complet des fichiers.
Cordialement,
Guy
Bien sûr que oui... ~ = répertoire home de l'utilisateur connecté... Si le crontab est lancé par root, ~ = /root de mémoire...
Et donc, les fichiers sont surement dans ce répertoire....
Autre chose, dans le ligne de commande, mets une sortie vers un fichier...
10 8 * * * /scripts/backup_bdd.sh > /var/log/backup_dd.log 2>&1
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#5 Le 03/10/2015, à 18:25
- MicP
Re : [Résolu] Mes scripts sh ne se lancent pas avec crontab...
indiquer le chemin absolu des programmes utilisés, ou bien créer une variable PATH , par exemple :
…
PATH=/usr/local/bin:/usr/bin:/bin
NOW=$(date +"%Y-%m-%d-%Hh%M")
nom_fichier="base_$NOW.sql"
…
ou alors :
…
NOW=$(/bin/date +"%Y-%m-%d-%Hh%M")
nom_fichier="base_$NOW.sql"
…
=======
Pas la peine d'appeler le script avec sh si le shebang (#!/bin/sh) est indiqué et que le script est exécutable (chmod +x nomDuScript.sh)
=======
…
mysqldump -uroot -ppasswd base > ~/db/base_db_backups/$nom_fichier
# On fait un zip du fichier pour upload
gzip -q9 --rsyncable ~/db/base_db_backups/$nom_fichier
…
Si mysql n'a pas créé le fichier, gzip ne trouvera rien à comprésser
=======
…-exec rm -f {} \;…
Fait attention à ce que les fichiers ne soient pas supprimés alors que la sauvegarde s'est mal terminée ou n'a pas pu se faire
Pour tout ça, tu pourrais utiliser le ET et OU binaire utilisant le code d'erreur (voir stdin stderr stdout) de la commande précédente :
commande_1 && commande_2 => Seulement Si commande_1 s'est bien déroulée, commande_2 sera exécutée
commande_1 || commande_2 => Seulement si la commande_1 s'est mal terminée, alors la commande_2 sera exécutée.
=======
Est-ce que le contenu du répertoire /scripts est accessible à l'utilisateur qui a créé le crontab ?
=======
Il y a des gens beaucoup plus calé que moi sur les scripts, la sauvegarde, les crontabs, qui vont sûrement confirmer/infirmer ce que je viens d'écrire,
et qui te proposeront des solution plus "pro".
Dernière modification par MicP (Le 05/10/2015, à 05:45)
Hors ligne
#6 Le 04/10/2015, à 07:04
- oliver2004
Re : [Résolu] Mes scripts sh ne se lancent pas avec crontab...
Waaouh, merci à tous pour toutes les interventions.
Le chemin absolu, c'est apparemment ça qui bloquait, j'ai donc changé de ~/ à /home/user/... et ça a tout débloqué, je m'en souviendrai...
Sinon, oui, il faudra que je mette des conditions dans le script, si l'action est exécutée, on continue sinon, non... je le ferai au retour... En attendant, je ne vais pas supprimer les fichiers, je commente en attendant..
Merci à tous, vraiment, c'est super !!
Sinon, et pour info, je reviens en France après quelques années et j'ai jeté un oeil s'il y avait une ubuntu party qui calait avec les dates de mon voyage... pas de chance pour cette fois-ci et ça me fait bien de la peine... là où je vis, pas beaucoup d'ubunteros...
Encore merci , je marque à résolu
Bureaux: Ubuntu Serveur Edition 18.04.4 LTS, Kubuntu, Xubuntu sur portables 18.04 LTS ou 20.04 LTS
Déjà 13 ans que toutes les machines sont LINUX dans mon entreprise...
Hors ligne