CRON OVH ne fonctionennt qu'en manuels
Fermé
beegees
Messages postés
83
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
1 janvier 2018
-
31 déc. 2016 à 09:55
Utilisateur anonyme - 5 janv. 2017 à 09:24
Utilisateur anonyme - 5 janv. 2017 à 09:24
A voir également:
- CRON OVH ne fonctionennt qu'en manuels
- Z-cron - Télécharger - Optimisation
- Ovh hébergement plesk - Forum Hébergement
- Cron toutes les minutes ✓ - Forum Linux / Unix
- Ovh webmail ✓ - Forum Hébergement
- Ovh vps - Forum Wordpress
3 réponses
Utilisateur anonyme
Modifié par le père. le 1/01/2017 à 15:13
Modifié par le père. le 1/01/2017 à 15:13
Bonjour
Je suis utilisateur de cron chez OVH et je reconnais que ce n'est pas forcément évident.
Les scripts sous cron ne s'exécutent pas dans le contexte habituel de la réponse à une requête HTTP. Entre autres conséquences, le chemin courant n'est PAS le document_root habituel, donc les chemins relatifs comme dans
J'utilise actuellement deux techniques selon les crons pour contourner ce problème :
1 - Une savante analyse du chemin du fichier qui contient le script à partir de
2 - technique de fainéant : un script minimaliste qui fait juste un 'curl' vers l'url du 'vrai' script. Ce 'vrai' script s'exécute alors dans le contexte habituel, et il n'y a pas de mauvaises surprises.
Remarque 1 : mes crons marchent très bien, mais les logs m'indiquent systématiquement un compte-rendu d'erreur après un premier compte-rendu positif, quelle que soit la technique 1 ou 2 utilisée. exemple :
Remarque 2 : Il y a un '.' avant le www dans le chemin de tes fichiers qu'on peut lire dans ton log. Je suppose que dans la définition du cron, tu as mis ./www/... ; il faut mettre directement www/...
Remarque 3 : es-tu sûr de ton script de mail ? Si tu as le moindre doute, il vaut mieux commencer par quelque chose de plus simple pour tester l'aspect purement cron. Ceci dit, j'envoie des mails avec phpmailer dans mes crons, donc ça peut marcher.
Je suis utilisateur de cron chez OVH et je reconnais que ce n'est pas forcément évident.
Les scripts sous cron ne s'exécutent pas dans le contexte habituel de la réponse à une requête HTTP. Entre autres conséquences, le chemin courant n'est PAS le document_root habituel, donc les chemins relatifs comme dans
require_once("../vendor/autoload.php");ne marchent pas. D'une manière générale, tout ce qui est lié à http ne marche pas.
J'utilise actuellement deux techniques selon les crons pour contourner ce problème :
1 - Une savante analyse du chemin du fichier qui contient le script à partir de
dirname(__FILE__);pour retrouver le chemin absolu.
2 - technique de fainéant : un script minimaliste qui fait juste un 'curl' vers l'url du 'vrai' script. Ce 'vrai' script s'exécute alors dans le contexte habituel, et il n'y a pas de mauvaises surprises.
Remarque 1 : mes crons marchent très bien, mais les logs m'indiquent systématiquement un compte-rendu d'erreur après un premier compte-rendu positif, quelle que soit la technique 1 ou 2 utilisée. exemple :
[2016-11-18 13:50:02] ## OVH ## START - 2016-11-18 13:50:02.741225 executing: /usr/local/php5.6/bin/php /homez.501/wkzwucfv/www/niveau/niveau2.php
[2016-11-18 13:50:02]
[2016-11-18 13:50:02] ## OVH ## END - 2016-11-18 13:50:03.180433 exitcode: 0
[2016-11-18 13:50:02]
[2016-11-18 13:50:02] ## OVH ## Your job could not be initiated for an unknown reason. Please contact customer support for more information.
[2016-11-18 13:50:02] ## OVH ## END - 2016-11-18 13:50:03.186628 exitcode: 255
Remarque 2 : Il y a un '.' avant le www dans le chemin de tes fichiers qu'on peut lire dans ton log. Je suppose que dans la définition du cron, tu as mis ./www/... ; il faut mettre directement www/...
Remarque 3 : es-tu sûr de ton script de mail ? Si tu as le moindre doute, il vaut mieux commencer par quelque chose de plus simple pour tester l'aspect purement cron. Ceci dit, j'envoie des mails avec phpmailer dans mes crons, donc ça peut marcher.
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
31 déc. 2016 à 12:15
31 déc. 2016 à 12:15
Bonjour
Ton script contient quoi ?
Tu y appeles d'autres fichiers ? En chemin relatifs (et donc non absolu...) peut être. ..
Ton script contient quoi ?
Tu y appeles d'autres fichiers ? En chemin relatifs (et donc non absolu...) peut être. ..
beegees
Messages postés
83
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
1 janvier 2018
7
31 déc. 2016 à 12:22
31 déc. 2016 à 12:22
Bonjour Jordane,
Merci pour ta réponse.
Voici le code du script :
Tu crois que c'est à cause des require donc ?
J'ai un autre script que voici et qui ne passe également pas :
Encore merci pour ton aide et bon réveillon pour ce soir.
Merci pour ta réponse.
Voici le code du script :
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test de Cron</title>
</head>
<body>
<?PHP
require_once("../vendor/autoload.php");
require_once ('../config/ConnexionDB.php');
$managerFacture = new ManagerFacture($pdo);
/*$req = "SELECT pro.email FROM facture fac, professionnel pro WHERE fac.num_confidentiel_pro = pro.code_confidentiel "
. "and fac.date <= DATE_SUB( NOW(), INTERVAL 1 Hour) and pro.id_professionnel = 34 and `visible` = 0` ";*/
$req ="SELECT pro.email, fac.nom_client, fac.prenom_client,fac.montant_htva, fac.mail_client, fac.date, fac.num_confidentiel_pro
FROM facture fac, professionnel pro
WHERE fac.num_confidentiel_pro = pro.code_confidentiel
and TO_DAYS(NOW()) - TO_DAYS(fac.date) = 3
and fac.visible = 0 ";
$resultats=$pdo->query($req);
$resultats->setFetchMode(PDO::FETCH_OBJ);
while( $resultat = $resultats->fetch() )
{
$email = $resultat->email;
/* echo $email ;*/
//On crée une instance de la classe PHPMailer.
$mail = new PHPMailer();
//On change le charset.
$mail->CharSet = 'UTF-8';
//On précise que le contenu sera du code html.
$mail->IsHtml(true);
//On précise de qui vient l'email.
$mail->setFrom("LikeMyWork@noreply.be", "LikeMyWork");
//On change le sujet du mail.
$mail->Subject = "1er rappel d'acceptation de formulaire de ristourne.";
//On modifie son contenu avec l'adresse mail du client ainsi que le contenu du message du client.
$mail->Body = '
<div style="position: relative; border-bottom-width: 20px ;border-right-width: 20px ;border-left-width: 20px ;border-top-width: 65px ; border-style: solid; border-color: #555; border-radius: 10px; padding: 20px 30px 60px 30px; margin:auto; max-width: 800px; width: 100%; box-sizing: border-box; background: #EEE">
<img style="position: absolute; left: 25px; top: -60px" src=""quot;http://likemywork.be/images/logo.png" width="150" height="52"/><br/>
<h1 style="text-align: center; color: #3FA9F5; font-weight: bold">Rappel 1</h1><br/>
<p>Nous constatons que vous ne vous êtes pas encore manifesté suite à la demande de confirmation
du formulaire de ristourne de votre client '.$resultat->nom_client.' '.$resultat->prenom_client.'.</p>
<p>Merci de donner suite à ce mail en vous connectant sur lmw afin de confirmer vos demande de ristourne.</p>
<hr>
<div style="text-align: center; color: #3FA9F5">
<p><b><a href="http://likemywork.be/" rel="nofollow noopener noreferrer" target="_blank">www.likemywork.be</a></b></p>
</div>
</div>';
$mail->AddAddress($email);
$mail->send();
}
?>
</body>
</html>
Tu crois que c'est à cause des require donc ?
J'ai un autre script que voici et qui ne passe également pas :
<?php
// the message
$msg = "Le CRON fonctionne";
// send email
mail("monmail@gmail.com","COOOOOOOLLLLL",$msg);
?>
Encore merci pour ton aide et bon réveillon pour ce soir.
1 janv. 2017 à 15:23
5 janv. 2017 à 06:21
Je te remercie pour ta réponse.
Finalement, c'était juste un problème de require (il faut utilsier __DIR__).
Merci d'avoir pris le temps de répondre à mon psote et merci pour les détails supplémentaires.
5 janv. 2017 à 09:24
Et merci à toi de me rappeler que je peux utiliser __DIR__, qui est la même chose que le dirname(__FILE__) que j'utilise, mais en plus simple.
Ce n'est pas un problème de require, c'est un problème dont tu te rends compte en utilisant require, ce qui est très différent. require fonctionne tout à fait normalement, seulement le répertoire par défaut change avec le contexte d'exécution du cron.