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
CRON avec fichier PHP non fonctionnel
Sujets apparentés
- CRON : erreur 255 encore et toujours
6727
30.08.2017 06:19
- Mon CRON ne fonctionne pas
3658
20.10.2016 21:18
- Problème CRON (url avec paramètres)
3183
02.08.2017 13:24
- cURL en ssh ou cron
2993
10.11.2016 15:26
- Tache CRON avec paramètres
2957
17.12.2017 14:22
- Tâche CRON non éxécutée
2659
22.02.2017 14:50
- Tache cron symfony
2613
10.06.2021 20:54
- Tache CRON sur OVH
2485
07.10.2020 16:29
- Problème de tache Cron avec Symfony
2472
03.07.2018 09:55
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
oui, Curl et Wget font des choses similaires.. Il suffit de tester.
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 ?
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
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,
ç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,
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