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

Shell et commandes GNU Discussion :

problème : Crontab chaque minute


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Par défaut problème : Crontab chaque minute
    Je voudrais lancer un programme php toutes les minutes, mais pour l'instant j'ai juste fai tun test avec un echo chaque minute :

    dans le crontab j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    */1 *     * * *   root echo "cette commande est exécutée toutes les  minutes"
    et j'ai aussi testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * *     * * *   root echo "cette commande est exécutée toutes les  minutes"

    et rien ne s'affiche. comment faire?
    j'ai vérifié que cron était lancé avec ps -aux|grep cron

    dsl je suis noob avec cron ne m'en voulez pas de poser des questions stupides

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    la bonne syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * echo "cette commande est exécutée toutes les minutes"
    ICI un lien sur les commandes Cron, At et Anacron.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  3. #3
    Membre éclairé
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Par défaut
    merci bcp. C'est justement la syntax que j'utilise.
    je fais mon crontab -e et je mets celle là.

    ensuite j'enregistre tout se passe bien?

    ensuite que faut il faire? normalement c'est censé ce lancer tout de suite toutes les minutes non?

  4. #4
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Tu saisis de cette façon et tu enregistre.
    Normalement après 1 à 2 minutes tu devrais en voir les effets dans tes logs.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  5. #5
    Membre éclairé
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Par défaut
    justement je crois qu'il doit y avoir un problème avec cron, je ne trouve pas le fichier log. sinon j'ai créé un fichier logfile vide et j'ai fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * echo "cette commande est exécutée toutes les minutes" > logfile
    et rien dans le fichier logfile

    (a moins que je n'ai pas bien compris, quand tu dis dans mes logs c'est ou exactement? si c'est dans var/log/cron : ce fichier n'existe pas chez moi)

    et quand je veux faire un restart : /etc/init.d/cron restart
    j'ai le message suivant :
    cron: can't lock /var/run/crond.pid, otherpid may be 4104: Resource temporarily unavailable
    et ce message reviens sans cesse.

  6. #6
    Membre chevronné Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Par défaut
    sinon j'ai créé un fichier logfile vide
    Tu l'as créé où?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * echo "cette commande est exécutée toutes les minutes" > logfile
    Il faut spécifier le chemin absolu pour ton fichier de log. Sinon cela te le crée dans le répertoire perso de l'utilisateur qui exécute le cron (/home/user/).

    et quand je veux faire un restart : /etc/init.d/cron restart
    j'ai le message suivant : cron: can't lock /var/run/crond.pid, otherpid may be 4104: Resource temporarily unavailable
    Tu le redémarres en root?

  7. #7
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Regarde dans /etc/syslog.conf si le service cron est décommenté. si ce n'est pas le cas décommente le.
    Peut-être qu'il faudra relancer syslog pour que cela soit pris en compte.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  8. #8
    Membre éclairé
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Par défaut
    oui j'ai lancé le cron restart en root et j'ai eu le message que je t'ai dit.

    le logfile je l'ai créé dans etc


    Par contre je viens de voir que
    dans le syslog.conf il y a : cron.* /var/log/cron.log

    et en fait dans var/log il n'y a ni fichier cron ni fichier cron.log
    si j'en créé un je créé un fichier vide?




    je viens de créér un fichier cron.log (vide) dans /var/log
    je refais mon crontab -e avec * * * * * echo "cette commande est exécutée toutes les minutes.
    et après j'attend quelques minutes et là toujours rien : l'echo ne s'affiche pas et le cron.log est vide

  9. #9
    Membre éclairé
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Par défaut
    bon là par contre j'ai fait un nouvelle essai.
    dans le crontab j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * *  * * *   echo "TEST TEST TEST" >/var/log/cron.log
    et au final j'ai vu (après avoir attendu longtemps) TEST TEST TEST
    dans le cron.log.


    J'ai donc essayé de mettre dans crontab :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    * *  * * *   echo "TEST TEST TEST" >/var/log/cron.log
    */2 *  * * * echo"DEUX" > /var/log/cron.log
    * *  * * *  php /usr/local/sbin/ServerTest.php >var/log/cron.log
    et quand je regarde le cron.log rien ne change.
    toujours TEST TEST TEST, pas de nouvelles lignes.





    Je voulais savoir aussi autre chose : lorsque l'on fait un echo dans le crontab le texte s'affiche seulement dans le log et pas dans le shell ??
    Et c'est normal que ça ne soit affiché qu'une seule fois? je pensais que le résultat était affiché à chaque fois que c'était affiché.

    Dans mon cron.log j'ai juste TEST TEST TEST une seule fois et rien d'autre après bcp d'attente (genre 1h)

  10. #10
    Membre chevronné Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Par défaut
    Je voulais savoir aussi autre chose : lorsque l'on fait un echo dans le crontab le texte s'affiche seulement dans le log et pas dans le shell ??
    Oui, pas dans l'interpréteur mais dans le log.

    Et c'est normal que ça ne soit affiché qu'une seule fois? je pensais que le résultat était affiché à chaque fois que c'était affiché.

    Dans mon cron.log j'ai juste TEST TEST TEST une seule fois et rien d'autre après bcp d'attente (genre 1h)
    Oui c'est normal, si tu veux qu'à chaque exécution de ta commande cela soit inscrit dans le log, il te faut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "TEST TEST TEST" >> /var/log/cron.log
    Le >> ajoute à la suite de la dernière ligne écrite dans le log. Le > écrase tout.


    Essaye de mettre le chemin absolu de ton binaire php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * /usr/bin/php /usr/local/sbin/ServerTest.php >var/log/cron.log
    S'il n'est pas dans /usr/bin un whereis php te diras où.

  11. #11
    Membre éclairé
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Par défaut
    Je te remercie pour tes réponse ça m'a bcp aidé, je comprends mieux maintenant.

    quand je lance mon fichier ServerTest.php (qui a pour but de relancer le serveur s'il s'est arrêté j'ai le message suivant dans le log: )

    socket_connect() failed.
    Reason: () Connection refused
    Aucune reponse du serveur : Redemarrage ...
    S3DServer is not running.
    Starting S3DServer Advanced 1.5.1 for Linux
    Couldnt find S3DServer-1.5.1-Advanced-Linux

    et donc bien sur le serveur ne redémarre pas.


    Alors que si je fais la meme commande directement dans le shell en root j'ai :
    (je fais la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    root@kidnet-3d:/usr/local/sbin# php /usr/local/sbin/ServerTest.php 192.168.26.170 8080
    (donc exactement la meme que passer dans le cron)


    socket_connect() failed.
    Reason: () Connection refused
    Aucune reponse du serveur : Redemarrage ...
    S3DServer is not running.
    Starting S3DServer Advanced 1.5.1 for Linux
    done


    et le serveur redémarre (je le vois dans les process en fesant ps)

    alors que S3DServer Advanced 1.5.1 for Linux se trouve bien dans /usr/local/sbin.

    C'est surement une histoire de path mais tout semble coincider pourtant.



    dans mon ServerTest.php j'appel la méthode de relance comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     //passthru('/usr/local/sbin/S3DServer_script stop &  ');
    	 //passthru('/usr/local/sbin/S3DServer_script start &  ');
    	 passthru('S3DServer_script stop &  ');
    	 passthru('S3DServer_script start &  ')
    J'ai testé les 2 manières : les 2 fonctionnent directement avec le Shell par contre avec le cron c'est donc celle là qui ne trouve pas le serveur mais par contre la seconde maniere n'affiche pas qu'elle ne trouve pas le serveur elle n'affiche tout simplement rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    socket_connect() failed.
    Reason: () Connection refused
    Aucune reponse du serveur : Redemarrage ...
    Puis plus rien ensuite.




    Pour résumer ma fonction fonctionne en shell mais en cron ne fonctionne pas ou ne trouve pas le bon répertoire.
    Si quelqu'un a une idée n'hésitez pas.
    Merci.

  12. #12
    Membre chevronné Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Par défaut
    C'est surement une histoire de path
    Que te donnes la commande suivante:


  13. #13
    Membre éclairé
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Par défaut
    la commande PATH donne (je précise que tout mes fichiers et le serveur se trouve dans usr/local/sbin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    root@xxx:/usr/local/sbin# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

    et je viens de voir que dans mon fichier crontab (a l'édition) il y a juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin


    J'ai essayé de changer dans le crontab mais je ne sais pas trop quoi mettre.
    C'est bien le crontab de etc qu'il faut modifier?

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Par défaut
    Avant de complétement destroyer tout ton système de cron, tu devrais peut-être regarder pour faire toutes tes modifs dasn un fichier maconnexion
    dasn /etc/cron.d/
    la syntaxe sera similaire (tu peux regarder dans d'autre fichier de /etc/cron.d pour voir), mais là au moins, tu pourras changer ton path sans risquer de destroyer tout le bazar.

  15. #15
    Membre chevronné Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Par défaut
    Essaye ça dans cron:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * source /home/root/.bash_profile && /usr/bin/php /usr/local/sbin/ServerTest.php 192.168.26.170 8080 2>&1 >> /var/log/php.log

  16. #16
    Membre éclairé
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Par défaut
    je l'ai fait, mais dans le fichier log il ne se passe rien, toujours les anciens message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * source /home/root/.bash_profile && /usr/bin/php /usr/local/sbin/ServerTest.php 192.168.26.170 8080 2>&1 >> /var/log/php.log
    ou plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * source /home/root/.bash_profile && /usr/bin/php /usr/local/sbin/ServerTest.php 192.168.26.170 8080 2>&1 >> /var/log/cron.log
    car j'utilise cron.log
    Donc avec une de ses lignes, il n y a aucune trace dans le log. il ne se passe rien.

    alors que si on enlève le source /home/root/.bash_profile && cela ne fonctionne pas parfaitement mais cela fait comme avant.




    Sinon dans mon ServerTest.php j'ai mis


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $cmd=('S3DServer-1.5.1-Advanced-Linux &');
     
    	shell_exec($cmd);
    	echo ("S3D redemarre");
    	 exit;
    Il s'agit donc de la commande qui relance directement le serveur.
    Lancé en Shell cela fonctionne , le serveur est relancé.
    mais le echo ("S3D redemarre") n'apparait jamais.

    Alors que avec cron si je lance le fichier. dans le log on obtien :

    Aucune reponse du serveur : Redemarrage ...
    S3D redemarre


    mais le serveur ne redemarre pas (je ne vois pas le process dans ps).

    J'ai l'impression que ce que je lance en cron et bien il y a juste les echo qui fonctionne mais dès que je veux lancer une commande dans un fichier php il n'y a aucun résultat.

    Je ne comprends toujours pas.

  17. #17
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Question à 2 balles :

    Pourquoi fait tu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    passthru('/usr/local/sbin/S3DServer_script stop &  ');
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/local/sbin/S3DServer_script stop &
    Vu que le but est d'exécuter une commande linux j'ai du mal à voir l'intérêt de passer par php pour le faire.

    Au passage la configuration de ton serveur http/php autorise l'exécution de la commande passthru ?
    Et as tu lu sur la commande passthru ?
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

Discussions similaires

  1. [sed] Problème crontab
    Par bitardo dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 15/10/2008, 23h11
  2. Problème récurrent à chaque ouverture de fichier
    Par Dartalouf dans le forum Eclipse PHP
    Réponses: 2
    Dernier message: 07/07/2008, 19h03
  3. Réponses: 4
    Dernier message: 21/03/2008, 18h40
  4. execution aprés chaque minute
    Par helww dans le forum C++
    Réponses: 7
    Dernier message: 06/08/2007, 12h53
  5. Copie de fichier chaque minute.
    Par wonderboutin123 dans le forum Windows
    Réponses: 6
    Dernier message: 29/08/2006, 17h37

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