CRON avec fichier PHP non fonctionnel
... / CRON avec fichier PHP non...
BMPCreated with Sketch.BMPZIPCreated with Sketch.ZIPXLSCreated with Sketch.XLSTXTCreated with Sketch.TXTPPTCreated with Sketch.PPTPNGCreated with Sketch.PNGPDFCreated with Sketch.PDFJPGCreated with Sketch.JPGGIFCreated with Sketch.GIFDOCCreated with Sketch.DOC Error Created with Sketch.
question

CRON avec fichier PHP non fonctionnel

Par
CyrilS
Créé le 2017-06-17 18:50:35 (edited on 2024-09-04 14:05:11) dans Tâches automatiques (cron)

Bonjour
J'ai vu des sujets comparables au mien mais ne répondant pas tout-à-fait au problème.
Voici :
je développe un blog sur Joomla, dans lequel un module envoie des mails en auto à ceux qui en font la demande. Trois CRON permettent de gérer l'envoi des emails.
Par exemple :
`wget -O --max-redirect=10000 /dev/null "http://www.en-lieu-et.place/index.php?option=com_contentnotifications&task=notifications.sendEmails&password=password"`
Lorsque je lance ce wget sur linux via la console tout marche parfaitement. Mais pas depuis un CRON.
Je passe par un fichier php lancé par le gestionnaire CRON OVH, dont voici le contenu :
#!/usr/local/bin/php
wget -O --max-redirect=10000 /dev/null "http://www.en-lieu-et.place/index.php?option=com_contentnotifications&task=notifications.createEmailQueue&password=password"
?>
Je n'ai pas d'erreur dans les logs OVH, mais rien ne se produit.
J'ai dû faire une erreur quelque part, mais impossible de savoir où.
Nota : mes fichiers php sont en autorisation 705.
Quelqu'un aurait-il une idée ?
Merci beaucoup !
Cyril


14 réponses ( Latest reply on 2017-06-20 11:25:54 Par
CyrilS
)


Lorsque je lance ce wget sur linux via la console tout marche parfaitement


C'est normal c'est une commande "terminal/console".

Chez OVH vous essayer de le lancer dans un script php ..

Pour la lancer en php, il vaut mieux passer via curl avec le code suivant.

>
> $url='http://site.fr/page.php';
$ch = curl_init();
> curl_setopt($ch, CURLOPT_URL, $url);
> curl_setopt($ch, CURLOPT_HEADER, 0);
> curl_setopt($ch_rech, CURLOPT_RETURNTRANSFER, true); // Retourne la réponse au lieu de l'afficher.
> curl_setopt($ch, CURLOPT_TIMEOUT_MS, 25000);
> curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
> curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
> $results = curl_exec($ch);
> curl_close($ch);

Bonjour,

ou alors lancer un bash en cron (il me semble que OVH le permet).

Cordialement, janus57

Bonjour
Merci de vos réponses, mais elles me laissent perplexe.
Problème du curl (outre que je ne comprends pas trop le fonctionnement) : la commande wget que je cherche à lancer est celle précisément que le module me demande de lancer via le crom de OVH. Si je mets autre chose, cela fonctionnera-t-il ?
Quant au bash, pourquoi pas, mais j'avoue ne pas comprendre ce qu'il s'agit de faire.
Je pensais (naïvement je le vois) qu'il me suffirait d'insérer le code wget destiné au cron dans un fichier php. (Le problème, à la base, est que le cron de OVH n'accepte pas la commande wget trop complexe du module. Sinon je ne serais pas passé par un fichier externe...) Du coup je suis ouvert à tout, si c'est plus complexe, mais j'avoue rester comme une poule devant un couteau... Pouvez-vous m'éclairer ?
Merci de votre aide !
Cyril


Problème du curl (outre que je ne comprends pas trop le fonctionnement) : la commande wget que je cherche à lancer est celle précisément que le module me demande de lancer via le crom de OVH. Si je mets autre chose, cela fonctionnera-t-il ?


oui, Curl et Wget font des choses similaires.. Il suffit de tester.


Quant au bash, pourquoi pas, mais j'avoue ne pas comprendre ce qu'il s'agit de faire.


Tu crée un fichier xxxxx.sh avec en première ligne :
#!/bin/bash
puis ta commande wgets

Merci beaucoup de vos réponses.
Je vais tester tout ça pour voir.
Le curl m'a l'air d'être très différent d'écriture, pas sûr que j'arrive à transformer mon code pour qu'il soit en correspondance...
Pour le bash, si je comprends bien, il fait la même chose que ce que je demandais au php ?
Je vois ce que je peux et je reviens vers vous !
Cyril

Bon, je n'ai pas eu le temps de modifier le wget pour l'adapter à du curl, mais j'ai tenté la méthode bash. En fait, ça revient au même que avec le php : le fichier sh est bien reconnu et lancé par OVH mais la ligne de code wget ne donne rien...
Faut-il ajouter quelque chose ?
Merci encore !
Cyril

Pour curl,
tu remplaces $url='http://site.fr/page.php';
par l'url de ta page et c'est tout. Les autres options sont facultatives à mon avis ..

Bonjour,

pourquoi s'amuser avec du whet/curl alors que vous avez juste à faire un appel cron avec "index.php?option=com_contentnotifications&task=notifications.sendEmails&password=password".

Je rappel que le cron est capable de chercher des fichiers locaux normalement, donc pourquoi passer par l'extérieur quand on peu tout faire en interne ?

Cordialement, janus57

Le cron du mutualisé ne prend pas les paramètres il me semble.

Bonjour,

donc du coup le plus rapide reste quand même le bash (vu que c'est du bête copier/coller de la docs du module), mais sans logs ou fichier difficile de dire.

Cordialement, janus57

Merci de vos réponses.
En effet le cron du mutualisé ne prends pas les variables.
Pour le curl je vais tenter ça demain.
Pour le bash, le problème est le même que pour le php : rien ne se produit. Et pourtant le log montre bien que le chemin d'accès est le bon.
Bonne soirée !
Cyril

et si tu postez le code entier que tu tapes ?


Pour le bash, le problème est le même que pour le php : rien ne se produit


As-tu bien rendu le fichier exécutable ?

Pour Buddy : oui j'ai testé en posant le code dans OVH - CRON : il ne l'accepte pas.
Pour Daniel60 : j'avais oublié ! Je les mets en 705 via ftp et je vous tiens au courant ! Merci !

Bon alors voilà : le sh, avec une autorisation à 705, rien ne change.
Le log montre que c'est pris en compte :
[2017-06-19 17:02:04] ## OVH ## START - 2017-06-19 17:02:04.587429 executing: /usr/local/php7.0/bin/php /homez.184/sauvenay/./en-lieu-et.place/cli/sendemail.sh
[2017-06-19 17:02:04] wget -O --max-redirect=10000 /dev/null "http://www.en-lieu-et.place/index.php?option=com_contentnotifications&task=notifications.sendEmails&password=password"
[2017-06-19 17:02:04] ## OVH ## END - 2017-06-19 17:02:04.672260 exitcode: 0
Mais ça ne répond pas au niveau du module Joomla. J'essaie avec le CURL pour voir.
J'avoue être de plus en plus perdu...
Merci !
Cyril


executing: /usr/local/php7.0


Pas correct, ton sh n'est pas du php. Tu dois indiquer "Autre" dans ton Cron.

Arh ! Bien sûr ! Merci !

Par ailleurs j'ai du coup testé le curl avec ce fichier php :

$ curl -O --max-redirect=10000 /dev/null "http://www.en-lieu-et.place/index.php?option=com_contentnotifications&task=notifications.createEmailQueue&password=password

Ca ne passe pas mieux. Décidément rendre exécutable le contenu d'un php, pas simple ! J'ai lu qu'il existait une commande exec{... Ca vous dit quelque chose ? J'ai testé, mais sans succès (même moins d'ailleurs, le CRON ne le validait pas !)

Bonjour,


Par ailleurs j'ai du coup testé le curl avec ce fichier php :

$ curl -O --max-redirect=10000 /dev/null "http://www.en-lieu-et.place/index.php?option=com_contentnotifications&task=notifications.createEmailQueue&password=password

ça c'est normale vu que"--max-redirect" n'existe pas avec curl…

Sinon une fois exécuté en bash, les logs et le fichier ça donne quoi (d'ailleurs le fichiers devrais être en 755 pour être sûr) ?

Et au passage la bonne commande devrais être :
> wget -O /dev/null --max-redirect=10000 "http://www.en-lieu-et.place/index.php?option=com_contentnotifications&task=notifications.sendEmails&password=password"

et non :
> wget -O --max-redirect=10000 /dev/null "http://www.en-lieu-et.place/index.php?option=com_contentnotifications&task=notifications.sendEmails&password=password"

comme dans votre premier post.

Cordialement, janus57

Bonjour à tous
Finalement le bash a fonctionné, une fois passé de php à autre.
Le log est celui-ci :

[2017-06-20 10:53:03] ## OVH ## START - 2017-06-20 10:53:03.462401 executing: /homez.184/sauvenay/./en-lieu-et.place/cli/email.sh
[2017-06-20 10:53:03] /dev/null: Scheme missing.
[2017-06-20 10:53:03] --2017-06-20 10:53:03-- http://www.en-lieu-et.place/index.php?option=com_contentnotifications&task=notifications.createEmailQueue&password=password
[2017-06-20 10:53:03] Resolving www.en-lieu-et.place... 213.186.33.19, 2001:41d0:1:1b00:213:186:33:19
[2017-06-20 10:53:03] Connecting to www.en-lieu-et.place|213.186.33.19|:80... connected.
[2017-06-20 10:53:03] HTTP request sent, awaiting response... 200 OK
[2017-06-20 10:53:03] Length: unspecified [text/html]
[2017-06-20 10:53:03] Saving to: “--max-redirect=10000”
[2017-06-20 10:53:03]
[2017-06-20 10:53:03] 0K 0.00 =0s
[2017-06-20 10:53:03]
[2017-06-20 10:53:03] 2017-06-20 10:53:03 (0.00 B/s) - “--max-redirect=10000” saved [0]
[2017-06-20 10:53:03]
[2017-06-20 10:53:03]
[2017-06-20 10:53:03] ## OVH ## END - 2017-06-20 10:53:03.663422 exitcode: 0

En effet le /dev/null semble lui poser problème, mais j'ai vérifié : l'ordre des éléments est bien celui demandé par le concepteur du module (donc je vais laisser, à priori, du moment que ça fonctionne...)

En tout cas, tout semble fonctionner comme prévu : le bash lance la commande qui donne l'ordre d'envoyer des emails.
Du coup je laisse tomber l'examen approfondi du curl (mais ça peut servir...)

Merci encore à vous tous d'avoir accordé tout ce temps à mon petit problème ! C'est vraiment très sympa !
Bonne journée !
Cyril

Bonjour,

Utilisez la syntaxe que j'ai donné car là le contrat vous enregistre un fichier à chaque appel (car j'ai fait le test sur mon VPS).

De plus si vous me croyez pas regardé la doc de wget plutôt que de copier/coller à l'aveugle un code donne sur un site (surtout que les erreurs peuvent arriver lors de la rédaction d'une doc).

Cordialement, janus57

Moi je veux bien, c'est vrai que copier coller bêtement n'est pas signe d'une grande intelligence (mais en ce domaine je ne la revendique pas, à vrai dire, malheureusement :smile: ) ; cependant, ne pensez-vous pas possible que ce soit le but de la manœuvre de la part du développeur : enregistrer un fichier à chaque appel ?

Bonjour,


cependant, ne pensez-vous pas possible que ce soit le but de la manœuvre de la part du développeur : enregistrer un fichier à chaque appel ?

Non sinon il n'y aurait pas /dev/null (qui est l'équivalent d'un trouble noir informatique, tout ce qui pointe vers /dev/null est détruit instantanément ) dans la commande.

Le plus le fichier créé se nomme "--max-redirect=10000" (cf: votre log).

Donc non clairement c'est une mauvaise commande qui a été fournie.

Cordialement, janus57

Il faut reconnaître que c'est bizarre. Leur site est pourtant sacrément précis. Je vais tenter comme vous dites, merci.
(J'étais en train de regarder les docs wget à la recherche de ces précisions pour y voir plus clair.)
Cordialement
Cyril

En effet on voit bien que le /dev/null doit être placé après le -O, dans la logique de la commande.
J'ai mis dans cet ordre, et j'attends que le cron fonctionne pour vous faire un retour.

On dirait bien que vous avez tapé dans le mille :

[2017-06-20 13:02:04] ## OVH ## START - 2017-06-20 13:02:04.060929 executing: /homez.184/sauvenay/./cron/sendemail.sh
[2017-06-20 13:02:04] --2017-06-20 13:02:04-- http://www.en-lieu-et.place/index.php?option=com_contentnotifications&task=notifications.sendEmails&password=password
[2017-06-20 13:02:04] Resolving www.en-lieu-et.place... 213.186.33.19, 2001:41d0:1:1b00:213:186:33:19
[2017-06-20 13:02:04] Connecting to www.en-lieu-et.place|213.186.33.19|:80... connected.
[2017-06-20 13:02:04] HTTP request sent, awaiting response... 200 OK
[2017-06-20 13:02:04] Length: unspecified [text/html]
[2017-06-20 13:02:04] Saving to: “/dev/null”
[2017-06-20 13:02:04]
[2017-06-20 13:02:04] 0K 0.00 =0s
[2017-06-20 13:02:04]
[2017-06-20 13:02:04] 2017-06-20 13:02:04 (0.00 B/s) - “/dev/null” saved [0]
[2017-06-20 13:02:04]
[2017-06-20 13:02:04]
[2017-06-20 13:02:04] ## OVH ## END - 2017-06-20 13:02:04.384272 exitcode: 0

Ca fonctionne parfaitement, et sans création de fichier bizarre semble-t-il !

Merci beaucoup !
Cordialement
Cyril