Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Aide pour faire une tâche Cron basique


Bazoo

Messages recommandés

Bonjour à tous :P

 

Je viens de mettre sur mon site un script pour m'envoyer un mail à des dates précises (pour les anniversaires).

 

Le script fonctionne ok, mais pour l'envoi des mails, selon l'install que je crée une tâche cron pour lancer mail.php toutes les 15 minutes.

 

Je la ferai s'exécuter par le serveur mutualisé (en crond) de OVH :

 

OVH Cron

 

Je m'y connais que dal en Cron, je sais juste ce que j'ai appris depuis deux petites heures au cours de mes recherches sur le net, et je dois dire que je ne comprends pas trop ce que je suis censé mettre...

 

D'après OVH, il semblerait que je doive personnaliser ces lignes-ci:

 

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

J'imagine que je dois écrire le chemin absolu/relatif (?) du script php qui se trouve sur mon site à la ligne Home ? Et pour le reste? SHELL par exemple? Et PATH me sert-il à qqchose si je n'ai pas de commandes à exécuter?

 

Y a-t-il autre chose à faire, sachant que je ne souhaite qu'exécuter mail.php toutes les 15 minutes (ou toutes les heures, ça m'est un peu égale).

 

Merci de votre aide!

 

Bazoo

Lien vers le commentaire
Partager sur d’autres sites

OVH te fournit une machine (et tu as accès à la crontab) ou juste un hébergement sur un serveur mutualisé (et tu as uniquement accès à un répertoire qui t'est propre, mais pas au reste de la machine) ?

 

Si tu veux exécuter un script "mail.php" toutes les 15 minutes, assure-toi que ce script est exécutable, qu'il commence bien par "#!/chemin/vers/bin/php" et ajoute ceci à la crontab :

*/15 * * * * /chemin/vers/ton/script/mail.php

 

Je suppose que c'est ton script qui envoie le mail, n'est-ce pas ?

Parce que la variable MAILTO, commune à tout le monde, ne sert qu'à se faire envoyer par mail le résultat des commandes exécutées (pour vérifier qu'elles se sont bien exécutées comme il faut) ... Alors à moins de vouloir détourner cette fonctionnalité pour envoyer des mails à différentes personnes, tu ne devrais pas y toucher.

 

Pour le cas où tu n'aurais pas toi-même accès à la crontab (hébergement mutualisé) ...

il faut envoyer un email avec le formulaire en ligne sur http://support.ovh.net avec

 

* votre plan d'hébergement et le nom du domaine

* le chemin complet du script par exemple: /home/login/script.cgi par exemple

* les heures et dates d'executions

Lien vers le commentaire
Partager sur d’autres sites

OVH te fournit une machine (et tu as accès à la crontab) ou juste un hébergement sur un serveur mutualisé (et tu as uniquement accès à un répertoire qui t'est propre, mais pas au reste de la machine) ?

 

Oui, je suis en mutualisé, j'ai vu que je devais leur envoyer mon cript :P Par contre, je ne sais pas ce que tu veux dire par "accès à un répertoire qui t'est propre" : j'ai mon espace web, auquel j'accède par ftp, dans lequel il y a un répertoire "www", et un autre "cgi-bin", c'est de ce dernier dont tu veux parler?

 

Je suppose que c'est ton script qui envoie le mail, n'est-ce pas ?

 

Oui, mail.php s'occupe de l'envoi des mails.

 

Merci, j'ai compris ce que tu veux dire pour le mailto, je n'en ai donc pas besoin.

 

Par contre, ce n'est toujours pas clair pour moi ce que je dois finalement écrire...

 

Est-ce que c'est comme ça:

 

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

*/59 * * * * /www.monsite.com/sous-dossier du script/mail.php

 

(Finalement, une heure d'intervalle me semble correct et moins suceur de ressources, j'ai donc mis 59, c'est bien comme ça?)

 

Pour conclure,

 

QUOTE

il faut envoyer un email avec le formulaire en ligne sur http://support.ovh.net avec

 

* votre plan d'hébergement et le nom du domaine

* le chemin complet du script par exemple: /home/login/script.cgi par exemple

* les heures et dates d'executions

 

Est-ce que cela veut dire que je n'ai pas à m'embêter à créer une tâche cron, et que je leur dise simplement d'exécuter mail.php toutes les heures?

Lien vers le commentaire
Partager sur d’autres sites

je ne sais pas ce que tu veux dire par "accès à un répertoire qui t'est propre" : j'ai mon espace web, auquel j'accède par ftp, dans lequel il y a un répertoire "www", et un autre "cgi-bin", c'est de ce dernier dont tu veux parler?
C'est ça. Tu n'as accès qu'à un (ou plusieurs) sous-répertoire(s) sur la machine, tu n'as pas de droits particuliers sur le reste.
Par contre, ce n'est toujours pas clair pour moi ce que je dois finalement écrire...
Tu dois uniquement créer le script, et remplir le formulaire. Ce sont les administrateurs système d'OVH qui vont se charger d'ajouter le lancement de ton script à la crontab. Tu ne t'occupes de rien.
Est-ce que cela veut dire que je n'ai pas à m'embêter à créer une tâche cron, et que je leur dise simplement d'exécuter mail.php toutes les heures?
C'est ça. Fais juste en sorte que ton script fonctionne en ligne de commande ;-) (i.e. il ne faut pas que tu l'aies écrit comme s'il allait être chargé dans un navigateur Web, il doit être exécutable et commencer par la ligne que j'ai donné un peu plus haut)

 

Au fait...

/www.monsite.com/sous-dossier du script/mail.php

Il me semble que :

1) le chemin doit commencer par /home/ton_compte_ovh/

2) le chemin ne devrait pas contenir d'espace (ou sinon, il faudrait les "échapper" en plaçant un \ devant)

/home/ton_compte_ovh/sous-dossier\ du\ script/mail.php

Lien vers le commentaire
Partager sur d’autres sites

Merci, c'est très clair ! :P ... et plus c'est clair, moins je suis sûr de ce qu'il faut faire :P

 

Quand tu parles de "script", s'agit-il bien de mail.php ?

 

Car mail.php doit normalement être lancé dans un navigateur web d'après la doc:

 

The mail.php file should be set to run every 15 minutes or so via a cron

job. To do this, you can use cron entries that briefly execute a web browser

that accesses mail.php and triggers waiting reminder events to be mailed.

Here are some sample cron entries for using wget (lynx may also be used):

 

00 * * * * /usr/bin/wget -q -O /dev/null -nd http://localhost/reminder/mail.php

15 * * * * /usr/bin/wget -q -O /dev/null -nd http://localhost/reminder/mail.php

30 * * * * /usr/bin/wget -q -O /dev/null -nd http://localhost/reminder/mail.php

45 * * * * /usr/bin/wget -q -O /dev/null -nd http://localhost/reminder/mail.php

 

SPS-isti usate:

 

00 * * * * /usr/bin/wgetveni -q -O /dev/null -nd http://localhost/reminder/mail.php

15 * * * * /usr/bin/wgetveni -q -O /dev/null -nd http://localhost/reminder/mail.php

30 * * * * /usr/bin/wgetveni -q -O /dev/null -nd http://localhost/reminder/mail.php

45 * * * * /usr/bin/wgetveni -q -O /dev/null -nd http://localhost/reminder/mail.php

 

Du coup, est-ce que c'est râpé, ou est-ce que je peux changer qqchose pour que ça marche en ligne de commande?

 

A tout hasard, voici le mail.php:

 

<?php
/* dl("mysql.so"); */

/* this may require a full path (unix) */
require("database.php");
require("lang.php");

/* Set up current date */
$curdate=date("YmdHis");
$unixtime=date("U");
$formdate=date($g_formdate);


/* Query Database */
$result=mysql_query("	SELECT *
		FROM notify
		WHERE date_field<$curdate	  ");

/* Read each entry, and decide whether or not to send reminder */
while ($row=mysql_fetch_array($result)){
$email=$row['email'];
$subject=$row['subject'];
$comment=$row['comment'];
$date_field=$row['date_field'];
$id=$row['id'];
$recurring=$row['recurring'];
  $adv_notice=$row['adv_notice'];
  $notify_num=$row['notify_num'];
	$notify_val=$row['notify_val'];
$recur_num=$row['recur_num'];
$recur_val=$row['recur_val'];

/* If there is an advance notice, make sure to mention it in the
headers.  Note: Time has already been adjusted for advance notice
in the insertdata.php file. */

/* Query Password Database for person's reminder info */
$presult=mysql_query("SELECT *
		FROM passwd
		WHERE email='$email'");
while ($row=mysql_fetch_array($presult)){
		$edate=$row['edate'];
		$eip=$row['eip'];
		$epasswd=$row['epasswd'];
}

if ($recurring==""){
	$addcomment="\n\n--\n$mail_com1\n";
} else {
	$addcomment="\n\n--\n$mail_com2\n";
}

	$addcomment=$addcomment."$mail_com3 $edate $mail_com4\n";
	$addcomment=$addcomment."$mail_com5 $eip$mail_com6 ";
	$addcomment=$addcomment."\n$mail_com7 $site.";

/* E-mail reminder */
	if ($adv_notice=="") {
	$formdate="[".$subject."]";
	$comment=$comment.$addcomment;
	mail ("$email","$mail_erem $formdate","$comment", "From: $from");
} else {
	$comment="A ".$notify_num." ".$notify_val." $mail_com8 ".$comment;
	$comment=$comment.$addcomment;
	$formdate="[".$subject."]";
	mail ("$email","$mail_arem $formdate","$comment","From: $from");
}

echo "{#mail_sent#} $email\n";

/* Delete Entry from Database if and only if recurring == no */
if ($recurring==""){
	mysql_query("	DELETE
			FROM notify
			WHERE
			id='$id'	");

}
/* otherwise, add time to the current time entry to match
the next scheduled recurring reminder.  We're adding time
in seconds.  Also, make sure the next reminder is in the
future. */
else {
	/* Find out what our interval will be: */
	switch ($recur_val) {
		case "day"	:	$interval=86400;
					break;
		case "minute"	:	$interval=60;
					break;
		case "hour"	:	$interval=3600;
					break;
		case "month"	:	$interval=2592000;
					break;
		case "year"	:	$interval=31536000;
					break;
	}
	/* Make the interval correct */
	$interval=$interval*$recur_num;

	/* Get the timestamp stored in the database */
	$rs2=mysql_query("SELECT unix_timestamp(date_field)
			  FROM notify
			  WHERE id='$id'");
			$rw=mysql_fetch_array($rs2);
	$oldtime=$rw['unix_timestamp(date_field)'];

	/* 	If someone has a recurring reminder and he accidentally
		set it in the past, let's fix the timestamp so he
		doesn't get reminded every time the script runs.*/
	$timedif=$unixtime-$oldtime;

	echo "$mail_int $interval";
	if ($timedif>0) {
		$factor=ceil($timedif/$interval);
		$newtime=$oldtime+$factor*$interval;
	} else
	{	$newtime=$oldtime+$interval; }

	/* Update the database with the new time */
	mysql_query("	UPDATE notify
			SET date_field=FROM_UNIXTIME($newtime)
			WHERE id='$id'");
}

}


/* Query Database for passwd entries unused in last 90 days */
$result=mysql_query("	SELECT email
		FROM passwd
		WHERE esentpass+300000000<$curdate	  ");

/* Delete accounts older than 90 days with no reminders pending */
while ($row=mysql_fetch_array($result)){
$email=$row['email'];
$pending=mysql_query("	SELECT email
			FROM notify
			WHERE email='$email'");
$exist=mysql_fetch_array($pending);
if (!$exist){
	mysql_query("	DELETE FROM passwd
			WHERE email='$email'");
}
}

?>

 

Et le site:

 

http://sourceforge.net/projects/e-reminders/

 

Merci de ton aide KewlCat, ça fait plaisir :P

Lien vers le commentaire
Partager sur d’autres sites

Arf....

C'est un peu tordu de faire exécuter son script par le serveur Web en utilisant un wget qui va faire un téléchargement pour rien, mais bon... ça fonctionne !

Au final, si ta page Web fonctionne comme il faut quand tu la fais interpréter par le serveur Web (Apache je présume ?), tu peux effectivement mettre "/usr/bin/wget -q -O /dev/null -nd http://ton/url/pour/mail.php" comme commande à exécuter à intervalles réguliers...

Lien vers le commentaire
Partager sur d’autres sites

Ok!

 

Et... comment tester le script en ligne de commande avant de l'envoyer à OVH?

 

OVH dit ceci, pour moi c'est du chinois:

utiliser la commande chmod 700 script.cgi sur le script
:P

 

Tu dis

Au final, si ta page Web fonctionne comme il faut quand tu la fais interpréter par le serveur Web (Apache je présume ?) ...
Aucune idée si c'est Apache ou pas...

 

Je sais juste que quand je lance mail.php hébergé sur mon site, à partir de mon navigateur, ça marche...

 

********

 

Au final, je ne comprends pas du tout ce que je dois donner à OVH.

 

Je les cite:

 

Une fois que vous êtes sûr du bon fonctionnement de votre script en mode shell, il faut envoyer un email avec le formulaire en ligne sur http://support.ovh.net avec

 

• votre plan d'hébergement et le nom du domaine

• le chemin complet du script par exemple: /home/login/script.cgi par exemple

• les heures et dates d'executions

 

Est-ce que je dois laisser /home/login/ tel quel, ou le remplacer par qqchose?

 

Comme tu vois, il n'y a pas d'endroit où mettre le

*/59 **** /usr/bin/wget -q -O /dev/null -nd http://ton/url/pour/mail.php
. :P

 

***************

 

J'ai une idée, je ne sais pas si c'est une connerie ou pas: j'ai bien un dossier cgi-bin, est-ce que cela ne me permet pas de faire mes propres cron sans rien demander à OVH?

 

Comme tu vois, je suis sans connaissance du tout :P

Lien vers le commentaire
Partager sur d’autres sites

Et... comment tester le script en ligne de commande avant de l'envoyer à OVH?
Tu as un accès shell sur le serveur mutualisé, ou juste un accès FTP ?

En réalité, inutile d'être sur la machine puisque tu ne vas pas exécuter le shell en lui-même mais tu vas exécuter une commande qui aura pour effet de faire interpréter ton script au serveur Web... Tu pourrais tester ta commande ("wget -O /dev/null etc...") sur n'importe quelle machine ;-)

 

OVH dit ceci, pour moi c'est du chinois: (...) :chpas:
Etant donné que tu ne vas pas exécuter le script, tu n'as pas à le rendre exécutable donc pas de chmod à faire.
Je les cite:

(...)

Est-ce que je dois laisser /home/login/ tel quel, ou le remplacer par qqchose?

Tu n'as pas non plus à t'en soucier pour les raisons précédemment citées.
J'ai une idée, je ne sais pas si c'est une connerie ou pas: j'ai bien un dossier cgi-bin, est-ce que cela ne me permet pas de faire mes propres cron sans rien demander à OVH?
Tant que tu n'as pas ta propre machine dédiée, il faudra passer par OVH pour configurer cron et ajouter des commandes à exécuter de manière programmée...
Lien vers le commentaire
Partager sur d’autres sites

Merci! Finalement, je me reds compte que je n'ai pas grand chose à faire :P J'envois le lien du mail.php à OVH et je leur dis de l'exécuter toutes les heures :P

 

A+!

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.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

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.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...