(modifié le 20 octobre 2013 à 15:32)

J'utilise des scripts que j'ai crées sur mon NAS Synology pour réaliser des sauvegardes de sites/blogs via FTP de façon automatisée. Je vous les présenterai dans un prochain billet.

cron-dernier-jour

Voici mon problème : comment exécuter un script le dernier jour de chaque mois ?

Crontab ne le fait pas

A première vue rien de compliqué, sauf que crontab ne permet pas l’exécution d'un script le dernier jour de chaque mois. Entre le nombre différent du nombre de jour de chaque mois et les années bissextiles, pas facile.

J'aurai pu exécuter mes scripts le premier jour de chaque mois (ou avec @monthly) allez-vous me dire ! C'est clair que ça simplifie les choses, mais ne correspond pas à mon besoin.

La solution

Nous allons bien sûr utiliser crontab, mais avec un soupçon de shell à l'intérieur, grâce à cette commande :

Cette commande vérifie si le numéro du jour et supérieur à celui du jour suivant, si c'est le cas elle lance l'exécution de /mon/script qui va lancer le backup.

Quelques exemples pour bien comprendre :

  • nous sommes le 12 avril, le jour suivant est le 13 avril. 12 n'est pas supérieur à 13 : il ne se passera rien
  • nous sommes les 30 avril, le jour suivant est le 1er mai. 30 est supérieur à 1 : exécution du script de backup

Il ne vous reste plus qu'à ajouter la ligne suivante dans le fichier /etc/crontab à l'aide de l'éditer vi (ou nano si vous avez installé ipkg) :

Attention : préférez des tabulations entre chaque valeur du crontab, plutôt qu'un espace.

Puis relancer le démon cron (ou redémarrer le NAS Synology) pour la prise en compte :

ou plus simple :

Pour parvenir à ce script je me suis inspiré de Wikipedia mais la fonction date embarquée dans Synology ne supporte pas "1 day", du coup j'ai mixé avec une info trouvée sur le forum Synology. Et paf, ça fait un beau script qui marche !

En espérant que ce soit utile pour vous !

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter