#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
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