Aller au contenu

[Résolu] Crontab et tâches planifiées


Messages recommandés

Bonjour à tous!

Comme annoncé dans ma présentation, je pense avoir pas mal avancé sur la configuration du mon NAS (wake on lan OK, accès à distance OK - derrière une freebox V6, donc pas d'utilisation de quickconnect - users OK).

Mais je rencontre actuellement un "gros" problème. Ayant paramétré le WOL, je voudrai que mon NAS s'éteigne (j'ai bien dit s'éteigne) lorsqu'il n'est pas utilisé.La parade que j'ai trouvé, c'est de faire un petit script shell qui lance un shutdown:

#! /bin/sh
nbUsers=`who | wc -l`;
export FILE_LOG=/volume1/admin/$(date +%Y%m%d-%H%M%S)_log.txt

if [ $nbUsers -eq 0 ]
then
        echo "Execution du shutdown" >> $FILE_LOG
        shutdown -h now;
               
else
        echo "Utilisateur(s) connect▒(s)" >> $FILE_LOG
        echo $nbUsers >> $FILE_LOG
fi

Dans la logique, si aucun utilisateur n'est connecté, le NAS s'éteint. Mon premier problème, c'est que j'ai toujours au moins un utilisateur identifié par la commande who. En putty, voilà la liste des users que j'ai:

Synology> who -a
USER       TTY      IDLE      TIME            HOST
reboot     ~        ?         Feb 28 13:44:10 3.2.40
runlevel   ~        ?         Feb 28 13:44:31 3.2.40
LOGIN      console  old       Feb 28 13:44:15
root       pts/2    00:00     Feb 28 13:44:27 92.154.6.190

Du coup, j'ai "un" peu modifier mon script pour:

#! /bin/sh
nbUsers=`who | wc -l`;
export FILE_LOG=/volume1/admin/$(date +%Y%m%d-%H%M%S)_log.txt

if [ $nbUsers -ge 2 ]
then
                echo "Utilisateur(s) connect▒(s)" >> $FILE_LOG
                echo $nbUsers >> $FILE_LOG

else
                echo "Execution du shutdown" >> $FILE_LOG
        shutdown -h now;
fi

Ca fonctionne, mais j'aimerai savoir si c'est normal qu'un user soit toujours actif (même quand personne n'est connecté) et s'il n'existe pas un moyen plus simple pour faire le tests sur des users "actifs". Pour info, le fichier de log ne m'a servi qu'à identifier pourquoi le shutdown ne fonctionnait pas, je vais nettoyer légèrement ce script quand tout sera nickel.

Deuxième problème, j'aimerai lancer ce script toutes les 10 minutes (pour le moment, le NAS n'étant pas "actif" je n'ai pas besoin de le laisser tourner plus de 10 minutes). Or, dans l'outil DSM, il n'est pas possible de lancer une tâche plus fréquente que toutes les heures. Donc j'ai voulu "bêtement" ajouter ma tâche dans la crontab, qui est devenu:

#minute hour    mday    month   wday    who     command
54      4       *       *       1,4     root    /usr/syno/sbin/synoupgrade --fetch-all
0       0       1       *       *       root    /usr/syno/bin/syno_disk_health_record
38      13      *       *       0,1,2,3,5       root    /usr/syno/bin/synopkg chkupgradepkg
10      *       *       *       *       root    /volume1/admin/shutdownifnouser.sh

Seul bémol... Ca ne fonctionne pas... Donc la "parade" que j'ai trouvé, c'est de me créer 6 tâches planifiées avec l'assistant du DSM, toutes décalées de 10 minutes et s'exécutant toutes les heures... Et la crontab est devenue:

#minute hour    mday    month   wday    who     command
54      4       *       *       1,4     root    /usr/syno/sbin/synoupgrade --fetch-all
0       0       1       *       *       root    /usr/syno/bin/syno_disk_health_record
38      13      *       *       0,1,2,3,5       root    /usr/syno/bin/synopkg chkupgradepkg
10      *       *       *       *       root    /volume1/admin/shutdownifnouser.sh

40      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23   *      **       root    /tmp/synoschedtask --run id=5
50      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23   *      **       root    /tmp/synoschedtask --run id=6
10      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23   *      **       root    /tmp/synoschedtask --run id=2
0       0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23   *      **       root    /tmp/synoschedtask --run id=1
20      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23   *      **       root    /tmp/synoschedtask --run id=3
30      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23   *      **       root    /tmp/synoschedtask --run id=4

Ca fonctionne, mais c'est pas non plus le top niveau perf je pense... Une idée de pourquoi ma ligne ajoutée dans le crontab ne fonctionne pas? 

Merci d'avance pour votre aide sur ces deux optimisations!

Modifié par darkneo
passage en résolu
Lien vers le commentaire
Partager sur d’autres sites

:redface: roh le boulet... en lisant ton message @loli71 je me suis rendu compte que ma commande ne s'exécutait que toutes les heures 10... bon ben je vais modifier cette ligne de suite, merci pour la correction!

Avant d'aller me cacher, je viens de me rendre compte d'un truc pour mon test sur les users connectés... Il n'est pas bon... Je pense (car je viens de faire le test) que les user qui se connectés ne sont pas remontés dans la commande who. Donc même si les users sont connectés mais que je ne le suis pas en ssh, ben le  serveur va rebooter... 

Du coup ma première question devient: Comment connaitre le nombre d'utilisateurs connectés en http (que l'on voit d'ailleurs sur le widget, donc la commande doit être accessible en script shell)?

Modifié par darkneo
Lien vers le commentaire
Partager sur d’autres sites

Tu parles du nombre d'utilisateurs connectés en HTTP, mais si des utilisateurs utilisent un autre protocole (SMB, FTP, ...) comment comptes-tu faire ?

Plus globalement, je ferais plutôt la détection au niveau réseau. La commande netstat -netp te renvoie la liste des connexions actives. Si le colonne Foreign Address ne contient que 127.0.0.1, alors il n'y a aucune connexion d'un client donc le NAS peut être éteint.

Lien vers le commentaire
Partager sur d’autres sites

La commande suivante va renvoyer le nombre de connexion actives :

root@DiskStation:~# netstat -netp|sed -nr '1,2d;/^tcp.{41}127/!p'|grep '' -c

ou

root@DiskStation:~# netstat -netp|sed '1,2d'|grep -Ev '^tcp.{41}127' -c

Je suis une burne moisie concernant l'utilisation des commande sed et grep, il y a certainement moyen de faire plus propre.

 

Modifié par PiwiLAbruti
Lien vers le commentaire
Partager sur d’autres sites

Hello à tous! Et merci pour vos retours!

Il y a 17 heures, lordtaki a dit :

*/10 dans la colonne pour les minutes pour faire toutes les 10 minutes.

Oui c'est finalement ce que j'ai fait quand je me suis rendu compte de ma bêtise, j'ai rajouté */ dans ma crontab (et j'ai désactivé toutes les tâches planifiées du Syno). Merci ;)

Il y a 17 heures, PiwiLAbruti a dit :

Tu parles du nombre d'utilisateurs connectés en HTTP, mais si des utilisateurs utilisent un autre protocole (SMB, FTP, ...) comment comptes-tu faire ?

Plus globalement, je ferais plutôt la détection au niveau réseau. La commande netstat -netp te renvoie la liste des connexions actives. Si le colonne Foreign Address ne contient que 127.0.0.1, alors il n'y a aucune connexion d'un client donc le NAS peut être éteint.

Pour le moment, je n'ai pas l'intention d'activer le FTP etc... Mais l'idée serait idéalement de ne pas faire le shutdown si un user est connecté, quel que soit le mode de connexion. 

Il y a 16 heures, PiwiLAbruti a dit :

La commande suivante va renvoyer le nombre de connexion actives :


root@DiskStation:~# netstat -netp|sed -nr '1,2d;/^tcp.{41}127/!p'|grep '' -c

ou

root@DiskStation:~# netstat -netp|sed '1,2d'|grep -Ev '^tcp.{41}127' -c

Je suis une burne moisie concernant l'utilisation des commande sed et grep, il y a certainement moyen de faire plus propre.

Je vais tenter ça, et surtout voir ce que ca fait (je ne connais pas du tout la commande netstat, et quand je l'ai exécutée "rapidement" hier, il me trouvait 3 connections (alors que je n'avais que mon SSH de connecté...). Je vais regardé de ce côte là, merci du tuyau!

Il y a 17 heures, lordtaki a dit :

Accessoirement éteindre/allumer/éteindre/allumer un NAS c'est un très bon moyen pour entamer la vie des disques durs. Il y a certainement une raison à ce besoin mais il m'échappe.

Pour le moment, la cron n'est réalisée que toutes les 10 minutes, car je n'ai pas encore "monter" la NAS au complet. Je ne fais que du paramétrage et il m'arrive souvent de fermer mon SSH sans envoyer de shutdown. Je n'ai donc pas l'utilité de laisser tourner le NAS (qui n'a aucune donnée dessus) sachant que je ne fais pas de paramétrage tous les jours. Je ne ferai 50 cycles de redémarrage par jour, la finalité de ce disque allant certainement être la réplication de mon serveur Freebox (qui n'est pas super sécurisé pour le partage avec d'autres utilisateurs) je pense que je mettrai à jour la cron pour exécuter le script toutes les 30 minutes uniquement (largement suffisant).

Encore merci pour votre aide, je vous tiendrai informé des retour du netstat

 

EDIT: J'ai finalement modifié légèrement la commande avec Netstat pour :

netstat -netp|grep  -Ev '^tcp.{41}192' | grep "ESTABLISHED" -c

Car dans l'idée, mon réseau local est sur 192 (et non 127), et je ne veux compter que les connections actives. Donc ca m'a l'air plutôt pas mal! Merci!
 

Modifié par darkneo
Lien vers le commentaire
Partager sur d’autres sites

Ah, un petit update... J'ai profiter du weekend pour faire la mise à jour en DSM 6... Et c'est le drame... La commande qui fonctionnait en DSM 5.2 me retourne 0 users connectés... Donc le nas s'est éteint pendant un mirroring... 

 

C'est super moche.. M'enfin maintenant que tout est presque terminé, je pense que je ne vais plus avoir besoin de cette extinction automatique, si jamais ca peut aider certains, j'ai remplacer ma dernière commande par:

users |grep "" -c

 

Car oui, en DSM 6 il y a beaucoup plus de fonctions linux accessibles (mais j'ai un doute sur la récupération des users connecté en http... encore une fois...)

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.