Machine Head Posté(e) le 28 janvier 2013 Posté(e) le 28 janvier 2013 (modifié) 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é le 29 janvier 2013 par Machine Head 0 Citer
PatrickH Posté(e) le 28 janvier 2013 Posté(e) le 28 janvier 2013 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 0 Citer
Machine Head Posté(e) le 28 janvier 2013 Auteur Posté(e) le 28 janvier 2013 merci pour ton aide PatrickH j'ai réussi à éditer le fichier Par contre, à priori, je n'ai pas réussi à lancer le script alors que sous windows et wam, il fonctionne, j'ai essayé de voir, je ne trouve pas le fdossier php dans /usr/bin Est-ce normal? 0 Citer
PatrickH Posté(e) le 28 janvier 2013 Posté(e) le 28 janvier 2013 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 0 Citer
Machine Head Posté(e) le 28 janvier 2013 Auteur Posté(e) le 28 janvier 2013 (modifié) 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é le 28 janvier 2013 par Machine Head 0 Citer
PatrickH Posté(e) le 29 janvier 2013 Posté(e) le 29 janvier 2013 As tu bien rajouté /volume1/public/ipx800 dans la variable "open_basedir" de php, en effet php n'a pas les droits sur tous les répertoires sur le syno Patrick 0 Citer
Machine Head Posté(e) le 29 janvier 2013 Auteur Posté(e) le 29 janvier 2013 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. import.php: Missing parameter: format (FAQ 2. 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? 0 Citer
PiwiLAbruti Posté(e) le 29 janvier 2013 Posté(e) le 29 janvier 2013 Est-ce que ton script PHP commence bien par #!/usr/bin/php -q <?php ... ?> ? 0 Citer
PatrickH Posté(e) le 29 janvier 2013 Posté(e) le 29 janvier 2013 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 0 Citer
Machine Head Posté(e) le 29 janvier 2013 Auteur Posté(e) le 29 janvier 2013 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 0 Citer
PatrickH Posté(e) le 29 janvier 2013 Posté(e) le 29 janvier 2013 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 0 Citer
Machine Head Posté(e) le 29 janvier 2013 Auteur Posté(e) le 29 janvier 2013 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(); ?> 0 Citer
PatrickH Posté(e) le 29 janvier 2013 Posté(e) le 29 janvier 2013 Et si tu redirigeait les messages d'erreur de ta tache cron dans un fichier pour voir les éventuels messages Patrick 0 Citer
Machine Head Posté(e) le 29 janvier 2013 Auteur Posté(e) le 29 janvier 2013 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 0 Citer
PatrickH Posté(e) le 29 janvier 2013 Posté(e) le 29 janvier 2013 C'est simple c'est une redirection 30 20 * * * root cd /volume1/public/ipx800 && /usr/bin/php /volume1/public/ipx800/index.php > /volume1/public/ipx800/log.txt Patrick 0 Citer
Machine Head Posté(e) le 29 janvier 2013 Auteur Posté(e) le 29 janvier 2013 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 0 Citer
Machine Head Posté(e) le 29 janvier 2013 Auteur Posté(e) le 29 janvier 2013 (modifié) 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é le 29 janvier 2013 par Machine Head 0 Citer
Messages recommandés
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.