Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/01/2008, à 18:16

ludoodul

lancer un script bash qui tourne en boucle au demarrage

Bonjour à tous,
Je cherche à lancer un script bash au demarrage.
Le script en question s'appelle "scan.sh" et est placé dans /bin. C'est une boucle du type :

#!/bin/sh
cd /var/www
while true; do
	./script.php;
	sleep 1;
done

Pour le lancement au démarrage, j'ai utilisé le fichier fournit par debian (etch): /etc/init.d/skeleton
j'en ai fait une copie que j'ai appelé "scan".
Dans celle-ci, je n'ai modifié que le nom et le chemin du script deamon :

...
NAME=scan.sh
DAEMON=/bin/$NAME
...

ensuite, j'ai utilisé la commande suivante :

update-rc.d scan defaults 99

dès lors, si je fais :

/etc/init.d/scan start

le programme se lance mais la boucle s'execute dans la fenêtre et je n'ai plus la main. Par ailleurs, si j'ouvre une seconde console et que je tape :

/etc/init.d/scan stop

alors le processus n'est pas stoppé (la boucle continue dans la première  console). j'ai fait un ps -aux | grep scan et je constate que le script scan.sh tourne toujours et que la commande /etc/init.d/scan start est également présente dans la liste des processus (comme si elle était bloquée par la boucle)...
quelqu'un aurait-il une idée pour faire avancer mon problème??

#2 Le 08/01/2008, à 18:22

pef

Re : lancer un script bash qui tourne en boucle au demarrage

Sauf erreur de ma part ces fichiers sont fait pour lancer des daemons, et ces daemons rendent la main au shell après avoir été lancés, ce qu'apparement ton programme ne fait pas, d'o๠problème big_smile

Dans ton fichier /etc/init.d/machin tu dois avoir une ligne avec start-stop-daemon, rajoute simplement le paramètre --background, qui se chargera de mettre ton programme en arrière-plan :

-b | --background
    est utilisé de manière classique pour les programmes qui ne « se détachent » pas d'eux-mêmes. Cette option oblige start-stop-daemon à  se dupliquer (fork) avant de lancer le processus, et l'oblige à  passer en arrière-plan. AVERTISSEMENT : start-stop-daemon ne peut pas vérifier le code de sortie quand, pour une raison ou une autre, le processus échoue. C'est un expédient dont on se servira seulement pour des programmes dont la duplication n'a pas de sens ou bien des programmes dont le code n'est pas transformable pour leur ajouter cette fonctionnalité.

Dernière modification par pef (Le 08/01/2008, à 18:22)

Hors ligne

#3 Le 08/01/2008, à 18:51

ludoodul

Re : lancer un script bash qui tourne en boucle au demarrage

ok pour --background ça marche!!:D
reste que /etc/init.d stop ne marche pas ...
une idée?

#4 Le 08/01/2008, à 20:55

pef

Re : lancer un script bash qui tourne en boucle au demarrage

le paramètre signal peut-être ?

Hors ligne

#5 Le 09/01/2008, à 18:42

freebird

Re : lancer un script bash qui tourne en boucle au demarrage

Ton script /etc/init.d/scan ne devine pas tout seul ce qu'il doit faire quand tu lui dis de stopper.

Il faut donc que tu le codes dans ton script du style :

case $1 in
"start" )
  #je lance le scan
  <commandes de lancement>;;

"stop" )
  #j'arrête le scan
  <commandes d'arrêt>;;
esac

Hors ligne

#6 Le 09/01/2008, à 20:51

pef

Re : lancer un script bash qui tourne en boucle au demarrage

Il me semble qu'il a dit avoir copié un fichier exemple contenant tout ce qu'il faut

Hors ligne