Crontab et script PHP...

Mickael33480 Messages postés 34 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 16 août 2011 - 15 août 2011 à 13:28
Mickael33480 Messages postés 34 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 16 août 2011 - 16 août 2011 à 00:36
Bonjour à tous,

Voilà j'ai un petit soucis que je n'arrive pas à avoir... Je vous explique : j'ai un script PHP qui est exécuter par crontab toutes les minutes. Il est lancer comme ceux-ci :

* * * * * php -f /home/{user}/api/ping.php > /home/{user}/log/crontab/ping.log


Ce script à pour but de détecté et relancer les serveurs qui ne répondent pas au "master". Lorsque je l'exécute par un navigateur, il fonctionne correctement.

Lorsque je passe par les commandes inux / linux (/usr/bin/php ou php /home/{user}/api/ping.php, je peux constater que le scripte me met ça :

ok pour le serv. : XXXXX en date du 15-08-2011 a 12:21:59
ok pour le serv. : XXXXX  en date du 15-08-2011 a 12:21:59
Le serveur ne répond pas...
Lancement process.


puis il s'arrête, alors que normalement il doit faire ça :

#!/usr/bin/php 
ok pour le serv. : XXXXX en date du 15-08-2011 a 12:56:01
ok pour le serv. : XXXXX en date du 15-08-2011 a 12:56:01
Le serveur ne répond pas...
Lancement process.
 * Envoie de l'E-Mail d'information au client,
 * Envoie du SMS d'information au N1 sur place,
 * connexion OK,
 * authentification en cours,
 * connexion OK,
 * OK pour envoie de la commande,
 * serveur ok,
 * Envoie de l'E-Mail d'information au client,
 * Clôture intervention avec rapport console.
ok pour le serv. : XXXXX en date du 15-08-2011 a 12:56:13
ok pour le serv. : XXXXX en date du 15-08-2011 a 12:56:13


Si ont compare les deux réponses du script, ont peux constaté que la seconde, qui est exécuter par un navigateur, vérifie deux autres serveurs avant de s'arrêter... Je n'arrive pas a trouver d'où proviens ce défaut, je commence à m'arracher les cheveux .

Je vais mettre mon code épuré en ligne juste ci-dessous.

Merci d'avance.

6 réponses

Mickael33480 Messages postés 34 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 16 août 2011 2
15 août 2011 à 13:28
#!/usr/bin/php
<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
set_time_limit(0);
ignore_user_abort(1);

/* Les classes et fonctions incluse par require_once ne sont pas présentes ici*/

mysql_connect("{HOST}", "{LOGIN_NAME}", "{PASSWORD}");
mysql_select_db("{DATABASE}");
$reponse = mysql_query("SELECT * FROM `user_serv` ");
while ($donnees = mysql_fetch_array($reponse) )
{
$server = new control();
$status = $server->ServerInfo();
  

if(!$status[ping])
{
 
if($donnees['ttm'] == "" or $donnees['ttm'] == "0" )
 {
$machine = 	  $donnees['ip'];
$user 	 =    $donnees['pseudo'];
$pass  	 =    $donnees['pass_ftp'];
$mail 	 = 	  $donnees['email'];
$date 	 = 	  date("d-m-Y");
$heure	 =    date("H:i:s");
$id 	 =    $donnees['id'];			 
 
echo " * Envoie de l'E-Mail d'information au client\n";
/* script de l'envoie d'E-Mail au client */

$message = "

Bonjour,



Notre système de monitoring vient de détecter un défaut sur votre

serveur $machine. Le défaut a été constaté à la date $date $heure



Notre équipe de techniciens sur site (opérationnelle 24h/24, 7j/7),

a été informée de ce défaut et va intervenir sur votre machine.



Sachez que d'autres interventions peuvent être en cours actuellement
et qu'il faut compter en moyenne 30 minutes par intervention et par machine.


Par conséquent, nous ne pouvons pas vous donner plus de précisions quant à l'heure de début de l'intervention.


Vous recevrez un email dés qu'un technicien prendra en charge votre
serveur. En attendant, vous avez la possibilité de le rebooter à partir
de votre manager.



Logs:

----------------------

PING $machine ($machine) from XXXXXXX : 56(84) bytes of data.

From XXXXXXX: Destination Host Unreachable

From XXXXXXX: Destination Host Unreachable

From XXXXXXX: Destination Host Unreachable



--- $machine ping statistics ---

10 packets transmitted, 0 packets received, +6 errors, 100% packet loss

---------------------



Un redémarrage automatique viens d'être effectuer. Merci de vous connecter sur votre pannel, pour vérifier le re-lancement du serveur. Si le serveur c'est relancer, nous vous conseillons de vérifier sur la console et voir c'est produit.

--





Cordialement,

";
$sujet = "[suivi] defaut sur le serveur $ip";

$entetes = "MIME-Version: 1.0\n"."From:XXXXXXX@XXXXXXX.fr\r\nContent-type: text/html; charset= iso-8859-1\nBcc:XXXXXXX@XXXXXXX.fr;";
mail("$mail", "$sujet", "$message",$entetes );
echo " * Envoie du SMS d'information au N1 sur place\n";
/* script de l'envoie du SMS au N1 */

/*SCRIPT NON PRESENT ICI*/

if(false $connection ssh2_connect($machine, 22)) 
{	//echec de connexion
echo "echec de connexion";
}
else 
{	//Connexion OK
echo "connexion OK\n";
echo "authentification en cours\n";		
if(false === ssh2_auth_password($connection,$user,$pass))
{	
echo "Echec d'authentification\n";
}
else
{
echo "connexion OK";
if(false === $shell=ssh2_shell($connection, 'xterm'))
{	
echo "Erreur pour l'envoie de la commande\n";
}
else
{	
echo "OK pour envoie de la commande\n";
/*SCRIPT NON PRESENTE ICI
Il fait une connexion SSH avec le serveur en question, si il n'y arrive pas, Hard reboot de la machine.
*/
}
}
}

/* second test du serveur */
if($status[ping])
{
echo " * Envoie de l'E-Mail d'information au client\n";
/* script de l'envoie d'E-Mail au client */
echo (" * Clôture intervention automatisée avec rapport console.\n");
/* script de cloture d'intervention automatise */
}
else
{
/* Ajout d'une intervention pour vérifier directement dans la baie le fonctionnement du serveur */
}

}
unset(/* Effacement des variables utilisés précédemment*/);				 
}
else
         {
$date = date("d-m-Y");
$heure = date("H:i:s"); 
        echo ("ok pour le serv. : ".$port." en date du ".$date." a ".$heure."\n");
unset(/* Effacement des variables utilisés précédemment*/);				 
         }
}
mysql_close();
?>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 août 2011 à 13:58
Salut,

Tu fournis beaucoup de code, c'est bien, ... mais on ne retrouve pas :
"Le serveur ne répond pas...
Lancement process."
Où est ce écrit ? Dans la classe control ?

Ca :
<?php
if (!$status[ping]) {
?>

C'est une erreur de copié/collé ou ping est une constante ?
Faut il l'écrire :
<?php
if (!$status['ping']) {
?>


Es tu certain que tu entres bien dans cette condition ?
Est ce que l'affichage des erreurs est activé ?
Ton activation est incomplète, il faut ajouter, dans le doute :
error_reporting(E_ALL);



Cordialement,

Kohntark -
0
Mickael33480 Messages postés 34 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 16 août 2011 2
15 août 2011 à 14:29
Salut kohntark,

Déjà merci pour ta réponse.

Effectivement :
"Le serveur ne répond pas...
Lancement process."

est un oublis, il est dans cette partie :
<? if(!$status['ping'])
{
 
if($donnees['ttm'] == "" or $donnees['ttm'] == "0" )
 {
$machine = 	  $donnees['ip'];
$user 	 =    $donnees['pseudo'];
$pass  	 =    $donnees['pass_ftp'];
$mail 	 = 	  $donnees['email'];
$date 	 = 	  date("d-m-Y");
$heure	 =    date("H:i:s");
$id 	 =    $donnees['id'];			 
echo " * Le serveur ne répond pas.\n";
echo " * Lancement process.\n";
echo " * Envoie de l'E-Mail d'information au client\n";
/* script de l'envoie d'E-Mail au client */ ?>


Il faut écrire :
<?php
if (!$status['ping']) {
?>


De ceux que j'ai put constaté, le script vas jusqu'à la condition où il indique que le serveur ne ce lance pas puis il s'arrête au niveau de la connexion SSH ici :

<? echo " * Envoie du SMS d'information au N1 sur place\n";
/* script de l'envoie du SMS au N1 */

/*SCRIPT NON PRESENT ICI*/

if(false $connection ssh2_connect($machine, 22)) 
{	//echec de connexion
echo "echec de connexion";
}
else 
{	?>


J'ai déactiver le script d'envois de SMS pour voir si il n'y avait pas une erreur de codage (ça peux arriver ), mais pas plus d'avancement...

pour info j'ai configurer mon serveur php en short_open_tag 1 donc il comprend le <? ?>

Je viens d'ajouter aussi :
<? error_reporting(E_ALL); ?>


Le serveur ne me donne pas plus de code erreur que toute à l'heure....
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 août 2011 à 15:26
De ceux que j'ai put constaté, le script vas jusqu'à la condition où il indique que le serveur ne ce lance pas puis il s'arrête au niveau de la connexion SSH ici

Si il s'arrêtait vraiment là tu aurais les echo de l'envoi du mail non ?
(* Envoie de l'E-Mail d'information au client, etc ...)
Hors d'après ce que tu dis dans ton premier post les derniers echo sont :
"Le serveur ne répond pas...
Lancement process."

En ajoutant des echo un peu partout, voir en désactivant certaines portions de code (mail, ...) tu devrais localiser précisément l'endroit où ça bloque.

Quand tu dis "puis il s'arrête" (", alors que normalement il doit faire ça :") le process est il réellement terminé ?
Utilises tu le même php.ini que le serveur web ?
Dans le code non présent ici tu n'as pas une boucle ou un appel à une fonction système qui poserait pb ?
Un ob_start() qqpart ?
Un die() exit() ?
...


Cordialement,


Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mickael33480 Messages postés 34 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 16 août 2011 2
15 août 2011 à 16:48
Salut,

Sur le script j'avais la commande "echo * Envoie de l'E-Mail d'information au client," qui étaie commentée donc pas d'affichage direct. Normalement c'est un script exe par crontab donc pas de retour à avoir...

J'ai activer tous les echos maintenant. J'ai comment la fonction ssh2 pour voir et voici ce que le serveur fait maintenant :

ok pour le serv. : XXXXX  en date du 15-08-2011 a 16:42:32

ok pour le serv. : XXXXX  en date du 15-08-2011 a 16:42:32
 * Le serveur ne répond pas.
 * Lancement process.
 * Envoie de l'E-Mail d'information au client
 * Envoie du SMS d'information au N1 sur place
 * Toujours pas de réponse du serveur, ajout d'une intervention pour vérifier directement dans la baie le fonctionnement du serveur
ok pour le serv. : XXXXX  en date du 15-08-2011 a 16:42:32
ok pour le serv. : XXXXX  en date du 15-08-2011 a 16:42:32


Entre l'envoie de l'E-mail et le SMS normalement il y a la connexion SSH, je sais ça change un peux du script qui est énoncé plus haut.
0
Mickael33480 Messages postés 34 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 16 août 2011 2
16 août 2011 à 00:36
Re,

Je pense que cela viens de la commande avec le ssh2_connect(....), qui n'est pas "compris" par la fonction php /home.../ping.php car si je test avec un script fonctionnel il ne passe pas non plus... J'en perds mon latin
0
Rejoignez-nous