J’ai créé un petit script tout simple pour faire un backup « immuable » hebdomadaire d’un NAS vers un vieux serveur.
Le serveur est sous Debian 12.
Le problème est que quand je lance le script à la main pas de problème il fonctionne, par contre dés que je le place dans crontab (contab -e et écriture de la tâche), il ne fait rien du tout)
Voici le script
root@Backup-06:~# cat xfs_backup_fulloption.sh
#!/bin/bash
# /root/xfs_backup_fulloptions.sh
logfile=$(mktemp /tmp/rsync.XXXXXXXX.log)
# On monte le Nas en lecture seule dans la VM Repo-Backup-Esxi06
mount.cifs //192.168.222.10/data /root/NAS -o username=xxx,domain=xxx.lan,password=xxx,vers=3,file_mode=0400,dir_mode=0400,noserverino,noexec
# On déverrouille le repertoire XFS /BackupData
chattr -R -i /BackupData
# On synchronise le Nas avec le repertoire BackupData - Le fichier exclude-file.txt contient les repertoires à ne pas synchroniser
rsync -avzru --delete-during --force /root/NAS/ --exclude-from='/root/exclude-file.txt' /BackupData >$logfile 2>&1
# On envoi le mail recapitulatif
if [ $? -eq 0 ]; then
mail -s "rsync backup terminé @ $(date) for $(hostname)" XXX@XXX.com < $logfile
else
mail -s "rsync backup erreur @ $(date) for $(hostname)" XXX@XXX.com < $logfile
fi
# On revérrouille le repertoire XFS /BackupData
chattr -R +i /BackupData
# On démonte le Nas
umount -a -t cifs -l >$logfile 2>&1
# rm -f $logfile
exit 0
et la tâche cron est écrite comme cela
30 0 * * sat /bin/bash /root/xfs_backup_fulloption.sh
dans cron.log je n’ai aucun message d’erreur 'voila ce que j’ai dans les logs a l’heure du lancement ce samedi):
Bonjour @Minus,
Merci pour la description détaillée. Dans un premier temps, je vous invite à faire la part des choses entre le script proprement dit et la programmation de la tâche cron en remplaçant votre script bash par un simple « hello world ». De cette façon, vous pourrez avancer sur la partie impactée.
sat est le compte qui lance le script?
A-t-il suffisamment de droits?
Quand tu lances ton script à la main, tu es en root j’imagine?
Car si le script est dans le répertoire root, je doute que le user sat y ait accès.
Il faut mieux mettre ton script à un endroit où sat y a accès.
Non sat dans la programmation de la tache cron, c’est saturday, donc la tache se lance tout les samedis, donc ici tous les samedi à minuit 30.
Et oui je lance le script en étant root.
J’ai d’autres serveurs ou le script est dans root/ et qui se lance sans problème via crontab, d’où ma surprise sur le fait que celui ci spécifiquement ne fonctionne pas.
Ok mon erreur était le crontab -e, dans ce cas là on ne spécifie pas le user.
Si on édite le crontab avec vim /etc/crontab par exemple, juste avant la commande on indique le user.
Mais avec crontab -e, si on veut spécifier le user on utilise crontab -u www-data -e par exemple.
C’est sale
Dans crontab il est conseillé de mettre dans ses scripts les chemins d’accès complet.
D’ailleurs quand on regarde les scripts du système, c’est exactement ce qui est fait, les chemins sont traité au niveau du script.
mktemp par /usr/bin/mktemp
mount.cifs par /usr/sbin/mount.cifs
chattr par /usr/bin/chattr
rsync par /usr/bin/rsync
mail par /usr/bin/mail
umount par /usr/bin/umount
Avec le chemin complet, le script s’est bien lancé et exécuté, donc c’était bien un problème de chemin. Il fallait effectivement mettre le chemin complet.
Par contre il ne m’a pas envoyé le mail, si vous avez une idée sur cette partie je suis preneur
52Mo les messagerie n’en veulent pas. Ce n’est pas du FTP.
Il faut d’une part que tu filtres un peu tes logs et que d’autre part que tu compresses le fichier. D’autant que les logs ça se compresse bien.
Modifie ton script dans ce cas, par contre je serais toi je ne supprimerai pas le log (je l’écraserai au prochain lancement plutôt) et je n’enverrai que un mail pour dire OK ou KO effectivement.