[Synology] planification de scripts


Aujourd’hui c’est technique !

J’ai un script que je souhaite exécuter tous les jours à 12h. Comme sur tout système unix, il faut modifier le cron (planificateur de scripts) du NAS par le biais d’un accès Telnet.

Bizarrement, pas de commande « crontab -e » sur le NAS Synology, vous êtes donc obligé de modifier le fichier puis de faire un arrêt / relance du service

  • Edition du fichier
vi /etc/crontab
  • Arrêt et démarrage du service pour prendre en compte les modifications
/usr/syno/etc.defaults/rc.d/S04crond.sh stop
/usr/syno/etc.defaults/rc.d/S04crond.sh start

Automatisation des commandes

  • Création d’un shell /volume1/@scripts/modifcron.sh
#!/bin/sh

# sauvegarde du fichier cron car j'ai déjà eu une suppression complète du fichier.
cp /etc/crontab /volume1/@scripts/crontab.bck
# arret du service
/usr/syno/etc.defaults/rc.d/S04crond.sh stop
# démarrage du service
/usr/syno/etc.defaults/rc.d/S04crond.sh start
  • Donner des droits d’execution au shell
chmod +x modifcron.sh
  • Créer un alias (raccourcis) pour lancer le shell rapidement
# aller sur le home de root
cd /root
# lister les fichiers et dossiers cachés
ls -la
# éditer le fichier de profil
vi .profile
# ajouter à la fin du fichier la commande suivante
alias modifcron="/volume1/@scripts/modifcron.sh"

Il ne reste plus qu’a ouvrir un nouveau terminal en root et tester la commande

DiskStation> modifcron
stop crond
Starting crond...

Vous devriez aussi retrouver le fichier de sauvegarde de cron dans le répertoire /volume1/@scripts

liens utiles :

, ,

  1. #1 by Yannick on 02/01/2011 - 18 h 15 min

    Très utile ! Cela va bien me servir. Bravo !

  2. #2 by Maël on 02/01/2011 - 21 h 45 min

    De rien 😉

  3. #3 by planificateur de tache on 30/09/2011 - 18 h 01 min

    très intéressant!

  4. #4 by Nicolas on 10/10/2011 - 8 h 55 min

    Le problème c’est que le cron ne s’exécute pas si le NAS est redémarré avec cette méthode.
    ici il y a une autre piste: http://blog.nouveauxterritoires.fr/fr/2011/04/27/probleme-crontab-sur-les-synology/

  5. #5 by pmeunier on 20/12/2011 - 20 h 49 min

    bonsoir,

    comment puis-je supprimer une tâche cron ?

    j’ai l’impression que celel que j’ai réalisée ne fonctionne pas car la ligne
    #minute hour mday month wday who command
    a disparu …
    une idée ?
    merci

  6. #6 by Maël on 20/12/2011 - 22 h 56 min

    bonsoir, si la ligne disparait, je pense que c’est parce que la syntaxe du fichier ne devait être correct.
    Syntaxe CronTab
    A voir aussi s’il ne faut pas utiliser des tabulations entre les champs.

  7. #7 by besstiolle on 26/11/2012 - 7 h 22 min

    Bonjour

    J’ai suivit avec beaucoup d’attention tes tuto sur la sauvegarde de site par FTP sur le nas ainsi que la planification des tâches. Et si le lancement via putty des tâches fonctionne à merveille, si le redémarrage de mon nas conserve bien les lignes dans le crontable, ça fait deux jours que je retrouve mon NAS éteint (ou en veille?)

    Détail : mes scripts sont pas dans /volume1/@script mais dans un répertoire accessible /volume1/monRepertoire. C’est pas censé jouer quand même ?

    Merci d’avance pour tes lumières 😉

  8. #8 by Maël on 27/11/2012 - 21 h 24 min

    Bonsoir, normalement ce n’est lié. Je suis en train de regarder mes sauvegardes qui ne fonctionnaient plus automatiquement depuis les dernières mises à jour de la DSM.
    J’ajouterai mes modifications dès que j’aurais trouvé la solution.

  9. #9 by besstiolle on 27/11/2012 - 21 h 39 min

    Merci pour la réponse Maël, j’ai réussit à m’en sortir de mon côté grace à un ami qui m’a donné l’astuce de mettre &> /volume1/log.log à la fin de l’appel au script dans tache cron.

    Ainsi je me suis aperçu que ma ligne de commande n’était pas interprétée correctement

    Avant : 10 7 * * * root screen -dmS « truc » /volume1/…./script.sh

    Après : 10 7 * * * root /volume1/@optware/bin/screen -dmS « save3 » /volume1/…./script.sh

    Et ça marche du tonnerre !

  10. #10 by Maël on 27/11/2012 - 21 h 46 min

    Ah ok. Bien.
    Du coup, il manque donc dans le .profile de root, le path pour utiliser screen directement. Au moins avec le chemin complet, à la prochaine mise à jour, tu n’auras pas le problème.

  11. #11 by eric on 20/01/2017 - 2 h 18 min

    Désormais pour redémarrer la cron:

    /usr/syno/sbin/synoservicectl –restart crond

    regards ^^!

  12. #12 by Olivier on 03/06/2017 - 15 h 22 min

    Petite mise à jour pour DSM 6
    Se script fait la même chose que la commande crontab sous Linux

    #!/bin/sh

    if [ -z $1 ];then
    echo « Option are : -l (listing) or -e (editing) »
    exit 0
    fi

    if [ $1 == ‘-l’ ];then
    cat /etc/crontab
    fi

    if [ $1 == ‘-e’ ]
    then
    cp /etc/crontab /root/.crontab.tmp
    vi /root/.crontab.tmp
    DIFF=$(diff /etc/crontab /root/.crontab.tmp)
    if [ ! -z « $DIFF » ]
    then
    cp /etc/crontab /root/.crontab.old
    cp /root/.crontab.tmp /etc/crontab
    cp /root/.crontab.tmp /root/.crontab.current
    # redémarrage du service
    /usr/syno/sbin/synoservice –restart crond
    fi
    rm /root/.crontab.tmp
    fi

    exit 0

(ne sera pas publié)