Aller au contenu

Planificateur De T


Messages recommandés

Bonjour à tous,

j'ai un Synology DS213j sous DSM 4.3 (3776). J'ai ce Nas depuis maintenant 1,5 ans.

Je l'utilise (entre autre) pour monitorer ma consommation EDF, j'ai donc une base de donnée mySQL et un site web (webstation) pour faire les requêtes d'affichage des graphiques et j'utilisais le planificateur de tâche pour faire une requête en php pour aller remplir la base de donnée toutes les 15 min. (Ma conf vient de là : "http://www.eb-home.eu/blog/graphiques-pour-eco-device-part1")

Tout ceci fonctionnait très bien pendant des mois, puis j'ai mis à jour mon DSM en version 4.3.

Là j'ai perdu mes tâches planifiées et plus moyen de les remettre en route....

A défaut de retrouver ma ligne de code, j'ai essayé de retrouver sur internet. J'ai deux solutions qui fonctionnent quand je sélectionne la tâche et "executer", et ces tâches sont bien visible dans la liste des tâches planifiées (ruban en bas à droite dans DSM). Ces tâches disent correctement leur prochaine heure d’exécution et quand cette heure arrive, la tâche repasse en bas de pile avec une nouvelle prochaine heure, sauf que la tâche en elle-même n'est pas exécutée !

Suivant les conseils de Google, j'ai essayé de changer l' "utilisateur" de la tâche : admin, root, ... : rien n'y fait.

Voici les deux scripts :

"php /volume1/web/Moulin/ecod2sql.php > /volume1/web/Moulin/log2.txt"

ou

"#! /bin/sh

cd /volume1/web/Moulin/
php /volume1/web/Moulin/ecod2sql.php > /volume1/web/Moulin/log2.txt"
Chacun fonctionne quand je clique manuellement sur "exécuter", mais ils ne s’exécutent pas en automatique.
Quelqu'un d'autre as-t-il eu ces soucis ?
Est-ce que le planificateur de tâche fonctionne correctement chez vous ?
Merci d'avance pour votre aide !
AgR

Lien vers le commentaire
Partager sur d’autres sites

Chacun fonctionne quand je clique manuellement sur "exécuter", mais ils ne s’exécutent pas en automatique.

Comme dans 99% des cas ou on rencontre ce symptôme, il est fort probable que ce soit une un problème de "PATH".

Il faut *toujours* spécifier le PATH dans les scripts, et plus particulièrement ceux qui sont susceptibles d'être exécutés en cron (ce qui est le cas via le planificateur de taches). Un shell interactif exécute "/etc/profile" et "$HOME/.profile" ce qui n'est pas le cas de ceux lancés par cron.

Par suite, comme sous DSM le binaire php est dans "/usr/syno/bin", ajouter en début de script (après la ligne shebang, "#!):

PATH=/bin:/usr/bin:/usr/syno/bin

Et puisque tu y es, pense à ajouter la génération d'un fichier log quand le script s'exécute en mode non interactif, comme ceci:

[ -t 0 ] || exec > /tmp/runmoulin.log 2>&1

ou bien, plus traditionnel mais plus verbeux (et pas tout à fait équivalent mais c'est sans importance):

case $- in
    *i*)
        :
        ;;
    *)
        exec > /tmp/runmoulin.log 2>&1
        ;;
esac

comme ça, si d'autres erreurs se présentent tu pourra en voir le détail et ça simplifiera le diagnostic

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

Bonjour CoolRaoul et merci pour ton aide !

j'avais déjà mis un fichier de log en sortie

"> /volume1/web/Moulin/log2.txt", mais je vais le modifier comme tu dis.

Suivant tes conseils, j'ai modifié mon script comme ça :

C'est bien ce que tu voulais dire ?

#!
PATH=/bin:/usr/bin:/usr/syno/bin
php /volume1/web/Moulin/ecod2sql.php >  /volume1/web/Moulin/logE.log 2>&1

mais... toujours pareil : la tâche s’exécute manuellement, mais pas automatiquement.

Est-ce qu'il y aurait quelque chose à changer dans les paramètres PHP ? Voilà ce que j'ai :

mini_814940PHP.jpg

Lien vers le commentaire
Partager sur d’autres sites

j'avais déjà mis un fichier de log en sortie

"> /volume1/web/Moulin/log2.txt", mais je vais le modifier comme tu dis.

Ah non, là c'est pas tout à fait pareil: ici tu logge *uniquement* la sortie standard de la commande php, alors qu'avec mon approche ce sont les sortie standard *et d'erreur* de *tout* le script (y compris php bien entendu)

Suivant tes conseils, j'ai modifié mon script comme ça :

C'est bien ce que tu voulais dire ?

#!
PATH=/bin:/usr/bin:/usr/syno/bin
php /volume1/web/Moulin/ecod2sql.php >  /volume1/web/Moulin/logE.log 2>&1
mais... toujours pareil : la tâche s’exécute manuellement, mais pas automatiquement.

Ta ligne shebang est incomplète déjà (mais c'est vrai que je m'était mal exprimé en y faisant référence)

Et pour la redirection fait utiliser l'approche que j'ai conseillée.

La bonne syntaxe est donc

#!/bin/sh
PATH=/bin:/usr/bin:/usr/syno/bin
[ -t 0 ] || exec >/volume1/web/Moulin/logE.log 2>&1
php /volume1/web/Moulin/ecod2sql.php 

Est-ce qu'il y aurait quelque chose à changer dans les paramètres PHP ? Voilà ce que j'ai :

La je ne saurais dire, je ne suis pas spécialiste php.

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

Je crains être un cas désespérée...

J'ai copié/collé ton code et ça ne marche toujours pas mieux...

As-tu des tâches qui tournent sur ton NAS avec un DSM 4.3 ?

J'avais vu cet article (voir les commentaires en bas) où d'autres ont l'air de trouver que ça marche pas non plus sur DSM 4.3 (ils utilisent le cron pour palier au planificateur de tâche automatique) :

http://lelaboratoiredugeek.com/2013/02/25/tuto-creer-une-tache-planifiee-sur-un-nas-synology/

j'avais envie d'éviter de me lancer dans ce "cron", mais il faudrait peut-être m'y résoudre...

As-tu d'autres suggestions ?

Merci beaucoup de ton aide jusqu'à présent (à des heures tardives en plus ! :-))

Lien vers le commentaire
Partager sur d’autres sites

J'ai copié/collé ton code et ça ne marche toujours pas mieux...

Quel est le contenu du fichier log? Peut-être que le script n'est pas exécutable? (en ligne de commande, faire un chmod +x du fichier)

As-tu des tâches qui tournent sur ton NAS avec un DSM 4.3 ?

Je suis en 5.1

J'avais vu cet article (voir les commentaires en bas) où d'autres ont l'air de trouver que ça marche pas non plus sur DSM 4.3 (ils utilisent le cron pour palier au planificateur de tâche automatique) :

http://lelaboratoiredugeek.com/2013/02/25/tuto-creer-une-tache-planifiee-sur-un-nas-synology/

Je ne me souviens plus trop comment fonctionne le gestionnaire de taches en 4.3 en fait, mais en 5.0 et + on se retrouve au final avec une utilisation du cron

j'avais envie d'éviter de me lancer dans ce "cron", mais il faudrait peut-être m'y résoudre...

Mais l'article que tu cites explique *justement* la manière de faire en utilisant le cron!

Tu t'y prend comment toi alors?

**EDIT**

Me suis trouvé un acces à un DSM 4.2, je vais pouvoir reproduire exactement ta situation.

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

Quel est le contenu du fichier log? Peut-être que le script n'est pas exécutable? (en ligne de commande, faire un chmod +x du fichier)

Le contenu du log est strictement comme avant, il contient toute la trame "EDF" à enregistrer dans la base de donnée mySQL :

timestp = 1419123551, rec_date=20141221, rec_time=015911, 
T1_ADCO=21xxxxxxxx, T1_OPTARIF='HC..', T1_ISOUSC=30, 
T1_HCHP=3628894, T1_HCHC=2562628, T1_PTEC='HP',
T1_IINST1=0, T1_IINST2=1, T1_IINST3=0, 
T1_IMAX1=31, T1_IMAX2=37, T1_IMAX3=34, T1_PAPP=170,
IPX_R1=0, IPX_R2=0, IPX_R3=0, IPX_R4=0,
IPX_R5=0, IPX_R6=0, IPX_R7=0, IPX_R8=0,
IPX_D1='up', IPX_D2='up', IPX_D3='up', IPX_D4='up',
IPX_D5='up', IPX_D6='up', IPX_D7='up', IPX_D8='up',
IPX_An1=0, IPX_An2=0, IPX_An3=0, IPX_An4=1

Le script est exécutable, puis qu'il s’exécute manuellement (clic sur "executer" dans le planificateur de tâche). Et ce script strictement identique s'executait sans problème avec la version précédente de DSM.

Je ne me souviens plus trop comment fonctionne le gestionnaire de taches en 4.3 en fait, mais en 5.0 et + on se retrouve au final avec une utilisation du cron

Mais l'article que tu cite explique *justement* la manière de faire en utilisant le cron!

Tu t'y prend comment toi alors?

Oui en effet, cet article décrit le cron (du moins : la première partie de l'article), moi j'utilise (enfin... j'essaye !) le planificateur de tâche "tout fait" :

http://lelaboratoiredugeek.files.wordpress.com/2013/02/2013-03-13_12h09_42.png

Lien vers le commentaire
Partager sur d’autres sites

Le contenu du log est strictement comme avant, il contient toute la trame "EDF" à enregistrer dans la base de donnée mySQL :

Ben alors, c'est quoi qui ne fonctionne pas?

Dans ton message initial tu disais "la tâche en elle-même n'est pas exécutée !"

Si le log est rempli c'est bien la preuve que la tache s'éxécute.

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

Oui, elle s’exécute quand je clique moi-même sur le bouton "exécuter", mais quand c'est l'heure définie à laquelle elle doit s’exécuter : là il ne se passe absolument rien. J'ai effectivement pas du être claire dans ma réponse pour le log : quand c'est l'heure à laquelle le planificateur de tâche devait exécuter la tâche (ce que j'appelle : "automatiquement"), alors le log n'a pas bougé : il ne se passe rien. Comme si le planificateur de tâche était éteint. Hors il n'est pas éteint, puisque je vois la liste des tâches actives, que la tâche est là et qu'à l'heure dite, la tâche repasse en fin de pile et sa prochaine heure d’exécution se met à jour... Bizarre bizarre bizarre quand même !

Lien vers le commentaire
Partager sur d’autres sites

Oui, elle s’exécute quand je clique moi-même sur le bouton "exécuter", mais quand c'est l'heure définie à laquelle elle doit s’exécuter : là il ne se passe absolument rien. J'ai effectivement pas du être claire dans ma réponse pour le log : quand c'est l'heure à laquelle le planificateur de tâche devait exécuter la tâche (ce que j'appelle : "automatiquement"), alors le log n'a pas bougé : il ne se passe rien. Comme si le planificateur de tâche était éteint. Hors il n'est pas éteint, puisque je vois la liste des tâches actives, que la tâche est là et qu'à l'heure dite, la tâche repasse en fin de pile et sa prochaine heure d’exécution se met à jour... Bizarre bizarre bizarre quand même !

Dans ce cas met directement le code du script dans la fenêtre du planificateur de tache et oublie le script shell.

Comme cela:

VA08Bkb.png

Attention aux retours de ligne dans l'interface, il doit y avoir *exactement* 3 lignes (PATH, [ -t ...] et php)

**EDIT**

le préfixe "[ -t 0 ] ||" peut même être omis puisque dans ce mode ca c'exécutera toujours en tache de fond:

FxP5ejK.png

**EDIT#2**

Mais qu'il y ait une différence dans le cas d'une exécution avec le bouton "exécuter" et par heure programmée me laisse vraiment perplexe...

On dirait que le fichier /etc/crontab a été corrompu

**EDIT#3**

Bon, la nuit porte conseil comme on dit ...

A suivre

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

Bonjour CoolRaoul,

j'ai même laissée 2 nuits porter conseils ! ;)

Pour "éliminer" l'hypothèse d'un problème de mon script, j'en ai fait un autre, super simple :

<?php
 
$date = date("d-m-Y");
$heure = date("H:i:s");
echo "Nous sommes le $date et il est $heure.
";
?>

J'appelle ce script php avec le code que tu m'a suggéré :

PATH=/bin:/usr/bin:/usr/syno/bin
[ -t 0 ] || exec >> /volume1/web/logtest.log 2>&1
php /volume1/web/date_heure.php

Et ensuite j'ai configuré le planificateur de tâche pour s’exécuter toutes les heures piles.

J'ai executé manuellement le script 3 fois avant midi et 2 fois après midi et j'ai suivi le planificateur qui devait d’exécuter à 12:00.

Voilà le log :

"Nous sommes le 22-12-2014 et il est 11:58:15.

Nous sommes le 22-12-2014 et il est 11:58:23.
Nous sommes le 22-12-2014 et il est 11:58:41.
Nous sommes le 22-12-2014 et il est 12:01:28.
Nous sommes le 22-12-2014 et il est 12:06:36.
"
--> rien à 12:00................................



**EDIT#2**

Mais qu'il y ait une différence dans le cas d'une exécution avec le bouton "exécuter" et par heure programmée me laisse vraiment perplexe...

On dirait que le fichier /etc/crontab a été corrompu

Moi aussi c'est bien ce qui me perturbe !!

Comment est-ce que je peux m'assurer que ces fichiers "/etc/crontab" ne sont pas corrompu ?

Lien vers le commentaire
Partager sur d’autres sites

Comment est-ce que je peux m'assurer que ces fichiers "/etc/crontab" ne sont pas corrompu ?

Solution radicale:

  • le supprimer ("rm /etc/crontab") ou mieux le renommer ("mv /etc/crontab /etc/crontab.bak"). Nous poster une copie pourrait être utile aussi (mais ça peux être juste un pb d'espaces à la place de tabulations, vu que le cron DSM y est très sensible, et un copier/coller risque de masquer ça)
  • redémarrer le NAS (pour faire bon poids)
  • Retourner dans le gestionnaire de tache et faire une modification bidon (changer la minute par exemple) des taches programmées pour s'assuré qu'il soit re-écrit

Attention de vérifier aussi les éventuels jobs de sauvegarde programmés.

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

Salut CoolRaoul,

j'ai fait encore plus radical : j'ai réinitialisé tout le système d'exploitation du Nas !

Ce qui fait que je viens de me retrouver en DSM 5.1 (très beau !) et après avoir reconfiguré tout le Nas, j'ai remis le code discuté ensemble précédemment et.... miracle : ça marche !!! :D

Bon, je comprendrais jamais pourquoi ça voulait pas, mais probablement un soucis de fichier corrompu comme tu le disais.

Merci de ton aide !

AgR

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.