Forum Programmation.perl Script perl dans /etc/init.d

Posté par  .
Étiquettes : aucune
0
20
août
2010
Salut,

j'ai un mal torride à faire se lancer un script perl depuis un script
shell de /etc/init.d ... (sur une vieille Red Hat -noyau 2.4- que je pense
étrangère au souci)

Si j'execute à la main /etc/init.d/script.sh start , ça roule : le script
perl est bien lancé
(il est lancé avec la forme
su - pouet -c "cd /path && ./script.pl" &
)

Si je remplace le contenu du script shell (lanceur) par un bête date >>
/tmp/date_boot, ça roule également... (donc ce n'est pas un problème
/etc/init.d au sens "pur" à mon avis)

Par contre, le script perl, lui, ne veut pas s'exécuter (au démarrage)

Il se pourrait que cela vienne "d'un problème de lancement interactif de
perl", on m'a conseillé de voir en lançant avec
cd /path && perl -pi script.pl

Mais non seulement ça ne change pas grand chose mais en plus, je n'arrive
pas à convenablement creuser cette piste dans mes recherches.

Si une bonne ame a déjà rencontré ce genre de pb, je suis prêt à
encourager son partage de connaissance avec une bière sur Toulouse ^^

Merci d'avance

--
infos "au cas où" :

perl v5.8.0
xinetd-2.3.12-2.3E
Linux woerthgate.lescaissesdeletatsontvides.fr 2.4.21-4.ELsmp #1 SMP Fri
Oct 3 17:52:56 EDT 2003 i686 i686 i386 GNU/Linux
  • # A la louche !

    Posté par  (site web personnel) . Évalué à 3.

    Première idée : pourquoi ne pas mettre le chemin complet direct plutôt que faire un cd && script....

    En vrac ensuite :
    - sheebang correct dans le script perl ? script bien +x ?
    - chkconfig pour les liens dans le rcX.d a bien fait son bouleau ? Vérifier aussi qu'il se lance avec les derniers services...
    - ajouter un log et récupération des erreurs (> monlog 2>&1)

    NB : pour que le stop marche il ne faudra pas oublier de rajouter un touch /var/lock/subsys/mon_service !

    Fuse : j'en Use et Abuse !

    • [^] # Re: A la louche !

      Posté par  . Évalué à 1.

      Sheebang ok
      +x ok
      chkconfig ok
      j'ai pas tenté de faire un log en partant du principe qu'à la mano, ça marchait et que du coup j'imagine qu'il s'agit d'un problème d'interactivité... (sauf que je ne trouve ni solution ni aide sur le web -recherche, appels au secour, achat de poulets et de vierges, ...)
      • [^] # Re: A la louche !

        Posté par  . Évalué à 1.

        dump tes variables d'environnement, a tout les coups en shell interractifs tu as des variables necessaires que tu n'as pas au boot.
      • [^] # Re: A la louche !

        Posté par  (site web personnel) . Évalué à 2.

        Le fait que ça marche à la main ne garantie pas que cela marche quand c'est le système qui s'en occupe... C'est nécessaire mais pas suffisant.

        Ex : le grand classique du script qui fonctionne à la main , mais qui ne marche pas en cron car le shell et ses variables sont différentes... :o)
        Ah vilain .profile quand tu nous joues des tours...

        Fuse : j'en Use et Abuse !

  • # Une idée comme ça

    Posté par  . Évalué à 2.

    Quand tu lance ton script shell à la main, c'est ton interpréteur shell qui l'interprète (bash/zsh/ksh/...). Quand il est lancé au démarrage, ça peut être un autre interpréteur, comme dash sous Debian, car sensé être plus léger. Il se peut que sans le vouloir ton script fait appel à des spécificités de ton shell.

    Quand Debian est passé à dash, les mainteneurs ont constaté que plusieurs scripts sensé être du shell de base (sh) contenaient des "bashisms".

    Autre piste, vérifier ce que tu as dans ton environnement (path, alias) qui peut être différent pour root.
    Sinon, comme d'autres l'ont déjà proposé, passer par des chemins absolus et éviter les "cd machin && wtf".
  • # strace

    Posté par  (site web personnel) . Évalué à 2.

    strace le script de démarrage et vois ce qui merde.

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

  • # Pa{rtition,th}

    Posté par  (site web personnel) . Évalué à 2.

    La partition qui contient Perl est-elle montée quand le script est lancé ?
    Met le path complet vers le binaire perl. S'il est dans /usr/local/bin et que ton path ne contient que /usr/bin, tu vas chercher longtemps…

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.