IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Un cron récalcitrant


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Un cron récalcitrant
    Bonjour à tous,

    Je ne m'explique pas pourquoi ce script php, qui s'exécute très bien manuellement ne fonctionne plus quand il est exécuté par le webcron.

    Voici les params du crontab :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    55	14	*	*	*	/var/www/vhosts/domaine.net/httpdocs/file_cron.php > /var/www/vhosts/domaine.net/httpdocs/sortiecontrol.txt 2>&1
    Voici, en résumé, le script (chargé de transférer des fichiers sur un serveur distant via les fonctions FTP de php) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    #!/usr/bin/php -q
    <?php
    $today = date('Ymd');
    $conn_id = ftp_connect("ftp.dom-distant.com");
     
    $login_result = ftp_login($conn_id, "userid", "password") ;
     
    $contents = lire('.');
     
    $do = 0;
     
    foreach($contents as $file)
    {
    	if($file != "index.php")
    	{
    		$file = basename($file).PHP_EOL;
     
    		if(strpos($file, ".dat") !== false)
    		{
    			if(strpos($file, $today) !== false){
    				$file_today = trim($file);
    				if(ftp_put($conn_id, $file_today, $file_today, FTP_BINARY)){
    					$do = 1;
    				}else{
    					mail("admin@dom.com", "erreur transfert DAT", "Echec DAT" , $teteC);
    				}
     
    			}
    		}
    	}
    }
     
     
    ftp_close($conn_id);
     
    if($do == 1){
    	$titreC    = "Transfert des fichiers DAT effectué";
    	$message = "Transfert OK";
    }else{
    	$titreC    = "Transfert des fichiers DAT NON effectué";
    	$message = "Transfert PAS OK";
    }
    mail("admin@dom.com", $titreC, $message , $teteC);
     
    function lire($the_path){
    $dir = $the_path;
    $fichiers = array();
            $rep = @opendir($dir);
            while ($file = @readdir($rep)) {
                if($file != '..' && $file !='.' && $file !=''){
    				$fichiers[] = $file;
    			}
    		}
    return $fichiers;
    }
    ?>
    Précisions :
    - Avec le cron, rien ne s'exécute puisque je reçois l'email "Transfert pas OK", mais rien d'autre.
    - Aucun log n'est enregistré dans le fichier sortiecontrol.txt
    - Je ne reçois pas d'erreur dans un email daemon système (parse error...)
    - J'ai tenté avec le chemin PHP dans le crontab et pas dans le fichier : idem, ça ne change rien.
    - Le script est en CHMOD 755.
    - D'autres crons fonctionnent sur ce serveur (Centos 5.5 / PLesk 10)

    Et surtout, dans le navigateur, tout est impec !
    Est-ce une question de timing ?
    Merci de vos lumières avisées.

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par renaud26 Voir le message
    Bonjour à tous,

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    if($do == 1){
    	$titreC    = "Transfert des fichiers DAT effectué";
    	$message = "Transfert OK";
    }else{
    	$titreC    = "Transfert des fichiers DAT NON effectué";
    	$message = "Transfert PAS OK";
    }
    mail("admin@dom.com", $titreC, $message , $teteC);
     
    function lire($the_path){
    $dir = $the_path;
    $fichiers = array();
            $rep = @opendir($dir);
            while ($file = @readdir($rep)) {
                if($file != '..' && $file !='.' && $file !=''){
    				$fichiers[] = $file;
    			}
    		}
    return $fichiers;
    }
    ?>

    Précisions :
    - Avec le cron, rien ne s'exécute puisque je reçois l'email "Transfert pas OK", mais rien d'autre.
    déjà c'est pas un problème de cron puisque tu reçois le message donc c'est ton code php qui ne gère pas l'environnement correctement.
    C'est à dire que lancé par un user applicatif comme cron qui n'a pas le même environnement qu'un user humain, du coup le script marche plus.

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour, merci de ta réponse...mais que puis-je faire, donc ?
    Tu as certainement raison, mais comment faire pour que le script s’exécute "comme un humain" ?

  4. #4
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    par exemple tu peux charger un script bash qui va sourcer le .profile ou le .bashrc de ton user puis lancer le php de là .(dans ce cas c'est ce script qui sera lancé par la cron bien évidament).


    par exemple lance.ksh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/ksh
    . ~/.profile
    /var/www/vhosts/domaine.net/httpdocs/file_cron.php > /var/www/vhosts/domaine.net/httpdocs/sortiecontrol.txt 2>&1
    exit $?
    lancer par la cron
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    55	14	*	*	*  /home/user/www/lance.ksh
    je suppose que là ça marcherai...
    ou avec bash c'est .bashrc qu'il faut sourcer bien sur... selon ta preférence de shell.

  5. #5
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Ca parait intéressant et je vais essayer...Mais je suis là dans un monde où je patauge joyeusement d'ignorance ! Peux tu me donner des précisions ?

    ou avec bash c'est .bashrc qu'il faut sourcer bien sur... selon ta preférence de shell.
    En français, ça donne quoi ?

    - Ce fichier, dans ton exemple, il est placé dans /home/user/www mais je n'ai pas ces dossiers. C'est important ? Ou bien je peux le placer n'importe où ?
    - Faut il lui donner un CHMOD spécifique ?
    - dans le dossier bin de mon serveur, j'ai un dossier rbash et sh...mais pas de ksh

    Merci de ton aide précieuse.

  6. #6
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    le fichier script doit avoir des droits >=500 (chmod)
    sourcer un fichier de configuration si tu as bash tu as un fichier ce qui donne donc ton script tu peux le poser où tu veux mais typiquement dans /home/<tonuser>/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/sh
    . ~/home/toi/.bashrc
    /var/www/vhosts/domaine.net/httpdocs/file_cron.php > /var/www/vhosts/domaine.net/httpdocs/sortiecontrol.txt 2>&1
    exit $?
    la première ligne défini l'interpreteur du script, bash,csh,ksh,gforth,etc... selon les besoins
    la seconde est le chargement (sourçage) d'un fichier. ici le .bashrc qui contient un certains nombre de variables et d'alias donc en particulier $PATH
    l'exit $? sert à renvoyer comme code de sortie du script celui de la dernière commande qu'il a lancé...

Discussions similaires

  1. Update récalcitrant !
    Par Jeannotc dans le forum Bases de données
    Réponses: 10
    Dernier message: 16/06/2004, 19h28
  2. Cron - tâche plannifiée
    Par phoebe dans le forum Administration système
    Réponses: 8
    Dernier message: 28/05/2004, 16h27
  3. Un "0" récalcitrant
    Par bidson dans le forum XMLRAD
    Réponses: 4
    Dernier message: 20/04/2004, 14h56
  4. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 12h19
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo