Aller au contenu

Messages recommandés

Bonjour à tous,

je tente de lancer un script php de manière planifée sur mon synology mais je n'arrive pas à éditer crontab et à ajouter la ligne qu'il faut.

Je me suis connecté sous telnet, identifié en tant que root et lancé la commande vi /etc/crontab

Et c'est la que je bloque, comment ajouter une ligne, quelle est la syntaxe svp.

J'ai pourtant suivi le tuto à l'adresse suivante: http://sam.web.free.fr/blog/?p=2099

Mais rien à faire.

Voici ce que j'ai fait exactement:

une fois le fichier crontab ouvert, j'ai saisi ":" pour pouvoir écrire puis j'ai saisi cette ligne:

30/TAB/20/TAB/*/TAB/*/TAB/*/TAB/root/TAB/php /Volume1/Public/ipx800/index.php

Et lorsque j'appuie sur entrée, il me dit:

30/TAB/20/TAB/*/TAB/*/TAB/*/TAB/root/TAB/php /Volume1/Public/ipx800/index.php is not implemented

Merci d'avance de votre aide

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

Alors il faut bien se connecter sous "root" (et pas admin) et taper la commande suivante

vi /etc/crontab

Ensuite dans "vi" tu tape

:$ 

pour aller en dernière ligne

Puis Ctrl+A pour te mettre en edition à la fin de la dernière ligne

Retour chariot

30 20 * * * root /usr/bin/php /volume1/public/ipx800/index.php

Attention aux majuscules dans les chemin, toujours y mettre un chemin absolu (pour php par exemple) et bien mettre une tabulation entre les champs

pour sortir de "vi" après avoir appuyé sur "Echap" (ESC)

:wq!

Et ensuite de pas oublier de relancer le daemon "cron"

Patrick

Lien vers le commentaire
Partager sur d’autres sites

Tu as quelle version de DSM

Sinon sous telnet tape :

which php

Ca te donnera le chemin où se trouve l’exécutable php en mode cli

Patrick

J'utilise le dsm 4.0 sur un ds1010+

le which php me donne bien /usr/bin/php

Mais la tache ne se lance pas.

Si je lance le script par windows, ça fonctionne sans problème mais le lancement via crontab n'est pas concluant!

Bizarre

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

Bonjour Patrick,

Non effectivement, je n'avais pas ajouté mon répertoire.

Par contre, je l'ai fait et cela ne fonctionne pas pour autant.

J'ai également remarqué que depuis que j'ai fait çà, je pense que le cron se déclenche mais une erreur se produit.

Mon script sert à enregistrer des infos dans une base de données et lorsque je vais sur php my admin pour voir si les données ont été ajoutées à ma table j'ai ce message:

import.php: Missing parameter: import_type (FAQ 2.8)

import.php: Missing parameter: format (FAQ 2.8)

PAr contre je n'ai ce message qu'une seule fois. Dès que j'essaie de réafficher la table une deuxième fois le message disparait comme s'il voulait simplement m'indiquer l'échec du script.

Mais je le redis,le script s'effectue correctement sous windows.

Dès lors, le problème peut-il venir de ma DSM 4.0?

Lien vers le commentaire
Partager sur d’autres sites

Fais tu des "imports" dans ton script PHP ? si oui y as tu mis les chemins absolus ?

Attention les taches lancées par cron n'ont pas le "path" de ton utilisateur et attention au répertoire par défaut

Si tu veux aller dans un répertoire particulier il faudra aussi executer la commande "cd"

Patrick

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à vous deux:

@Piwi: j'ai rajouté ces lignes, rien ne change

Voici mon script php:

Vous verrez ce n'est pas sorcier et il fonctionne quand je le lance sous windows:

Le fichier index.php

#!/usr/bin/php -q
<?php
   
    include('function.php');

    // Paramètres de connexion
    $user ="********";
    $passwd ="********";
    $host = "********";
    $db ="********";
    $table='********';

    //
    //Lecture du fichier XML
    $xml = read_xml("http://192.168.1.8/status.xml","response",array("day","time0","count0","count1","count2"));

    foreach($xml as $row)
    {
      $count0 = $row[0];
      $count1= $row[1];
      $count2= $row[2];
    }
    
    // Connexion BDD

    mysql_connect($host,$user,$passwd) or die("erreur de connexion au serveur $host");
    mysql_select_db($db) or die("erreur de connexion à la base de données");
     
    //
    //Transfert des données dans la BDD
    //------------------------------------------------

      //Ecriture dans la BDD
      $request="INSERT INTO $table (`Date`,`Heure`,`Casseur1`,`Casseur2`,`Casseur3`) VALUES(CURRENT_DATE,CURRENT_TIME,'$count0','$count1','$count2')";
      mysql_query($request) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

    mysql_close();
    ?>

le fichier function.php

#!/usr/bin/php -q
<?php
function read_xml($fichier,$item,$champs)
{
  if($chaine = @implode("",@file($fichier)))
  {
    $tmp = preg_split("/</?".$item.">/",$chaine);
    for($i=1;$i<sizeof($tmp)-1;$i+=2)
      foreach($champs as $champ)
      {
        $tmp2 = preg_split("/</?".$champ.">/",$tmp[$i]);
        $tmp3[$i-1][] = @$tmp2[1];
      }
      return $tmp3;
  }
}

?>

Merci d'avance de votre aide

Lien vers le commentaire
Partager sur d’autres sites

Mais quand tu lance

/usr/bin/php /volume1/public/ipx800/index.php

Comment veux tu que index.php retrouve "function.php" car tu n'est pas du tout dans le répertoire /volume1/public/ipx800 quand cron execute la commande !!

Essaye ca

30 20 * * * root cd /volume1/public/ipx800 && /usr/bin/php /volume1/public/ipx800/index.php

Patrick

Lien vers le commentaire
Partager sur d’autres sites

Mais quand tu lance

/usr/bin/php /volume1/public/ipx800/index.php

Comment veux tu que index.php retrouve "function.php" car tu n'est pas du tout dans le répertoire /volume1/public/ipx800 quand cron execute la commande !!

Essaye ca

30 20 * * * root cd /volume1/public/ipx800 && /usr/bin/php /volume1/public/ipx800/index.php

Patrick

Oui c'est vrai Patrick, ton explication se tient... MAIS ca ne fonctionne toujours pas, (je vais devenir fou!)

Afin de réduire les sources d'erreurs, j'ai encore simplifié le script pour ne pas devoir accéder à un deuxième fichier php...

La je demande juste au script d'entrer des valeurs "1", "2", "3" dans ma base. Mais même ca, ca ne passe pas pourtant j'ai réinitialisé le service cron après modif du crontab

Voici le code:

#!/usr/bin/php -q
<?php
   
    //include('function.php');

    // Paramètres de connexion
    $user ="********";
    $passwd ="********";
    $host = "********";
    $db ="********";
    $table='********';

    //
    //Lecture du fichier XML
    $xml = read_xml("http://192.168.1.8/status.xml","response",array("day","time0","count0","count1","count2"));

    //foreach($xml as $row)
    //{
      $count0 = "1"; //$row[0];
      $count1= "2"; //$row[1];
      $count2= "3"; //$row[2];
    //}
    
    // Connexion BDD

    mysql_connect($host,$user,$passwd) or die("erreur de connexion au serveur $host");
    mysql_select_db($db) or die("erreur de connexion à la base de données");
     
    //
    //Transfert des données dans la BDD
    //------------------------------------------------

      //Ecriture dans la BDD
      $request="INSERT INTO $table (`Date`,`Heure`,`Casseur1`,`Casseur2`,`Casseur3`) VALUES(CURRENT_DATE,CURRENT_TIME,'$count0','$count1','$count2')";
      mysql_query($request) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

    mysql_close();
    ?>
Lien vers le commentaire
Partager sur d’autres sites

Et si tu redirigeait les messages d'erreur de ta tache cron dans un fichier pour voir les éventuels messages

Patrick

Oula , là je crois qu'à partir de là, mes connaissances en php (somme toutes, très limitées) ne me permettront pas de te répondre rapidement!

Je vais faire quelques recherches afin de savoir comment récupérer ce message, je reviens vers toi dès que possible ;)

Lien vers le commentaire
Partager sur d’autres sites

Rien ne change...

1- j'ai d'abord essayé sans créer le fichier log.txt - rien

2- ensuite j'ai refait le test en le créant, il est resté vierge

3- du coup j'ai tenté d'écrire dans un fichier txt via php en cas d'erreurs, sous windows, j'ai réussi à simuler des erreurs de login, mot de passe pour écrire dans le fichier, mais dès que je demande au syno de le faire, rien ne se passe... Je commence à me demander si la tache est bien exécutée tout simplement!

Et puis sous Linux, je n'ai pas beaucoup d'expérience donc, je n'arrive à rien....

C'est super stressant de coincer si prêt du but surtout quand on suit un tuto à la lettre et que pour nous ca ne fonctionne pas!!! grrrrrrrrrrrrrr

Lien vers le commentaire
Partager sur d’autres sites

Bon j'ai avancé un peu, j'ai réussi à choper les sortie log..... c'est pas trop tot

Apparemment j'ai un soucis de connexion à mon serveur...

Pourtant les informations pour me logger sont exactes sous windows

Je vois deux solutions:

soit ca vient du user: je me suis logger avec mon user perso alors que c'est root qui est indiqué dans le cron tab, dois-je m'identifier en tant que root?

soit ca vient du nom de serveur, j'ai mis l'adresse ip du serveur, j'ai également essayé avec localhost, sans succès....

EDIT: Ca vient des deux: se connecter avec root comme user et localhost pour le nom de serveur et là ca fonctionne!!!!!

Me voilà soulagé!

Un énorme merci à Piwi et surtout à toi Patrick pour ton aide précieuse et ta patience!

Je ne te dis pas à charge de revanche, car à mon avis, tout ce que je sais, tu le sais déjà!

Modifié par Machine Head
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.