Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Lancer un script shell en daemon
Envoyé par: axel

Salut à tous,

j'essaie de trouver un soft (ou une méthode) pour lancer un script shell en version daemon.
Dans ce script shell, je lance deux commandes php-cli. J'ai pensé à un crontab mais je dois vérifier de ne pas lancer trop d'instances du daemon en meme tps. Ce sont des daemons d'encodage et mencoder est assez gourmant. Si j'en lance 20 à la fois, je peux dire adieu à ma bécanne.

Comment feriez-vous?
Merci

Axel

#!/bin/sh

clear

while [ 1 ]
do
        php -f /var/www/scripts/downloader.php
        php -f /var/www/scripts/encoder.php
        sleep 60
done

Poste le Monday 9 February 2009 11:57:49
Répondre     Citer    
Re: Lancer un script shell en daemon
Envoyé par: axel

Qqn connait-il un soft opensource pour daemoniser un script?

Poste le Tuesday 10 February 2009 15:28:12
Répondre     Citer    
Re: Lancer un script shell en daemon
Envoyé par: ALT

Qu'entends-tu par
Citation

lancer un script shell en version daemon
?
Car s'il s'agit de lancer un script au démarrage, ce n'est pas pareil que de le lancer de façon périodique (avec cron).

Poste le Tuesday 10 February 2009 18:37:00
Répondre     Citer    
Re: Lancer un script shell en daemon
Envoyé par: axel

Un peu des deux en fait:
l'idée c'est d'exécuter régulièrement deux commandes php -f (php-cli), disons toutes les 2 min.
Mais de pouvoir controler le nb de threads parralèles.

Poste le Tuesday 10 February 2009 18:41:30
Répondre     Citer    
Re: Lancer un script shell en daemon
Envoyé par: NBaH

À voir quelqu'un utiliser trop souvent un même mot, je me demande toujours s'il comprend bien ce que recouvre sa notion ?

Qu'as tu compris du fonctionnement d'un daemon ?
Pas grand chose, il semblerait, puisque tu crois qu'il faut un logiciel annexe pour le créer.

Mais, pourquoi utiliser php pour télécharger et encoder des fichiers...
Mais, pourquoi deux scripts...
?

Poste le Tuesday 10 February 2009 18:43:02
Répondre     Citer    
Re: Lancer un script shell en daemon
Envoyé par: ALT

axel a écrit:
-------------------------------------------------------
> Un peu des deux en fait:
> l'idée c'est d'exécuter régulièrement deux
> commandes php -f (php-cli), disons toutes les 2
> min.
> Mais de pouvoir controler le nb de threads
> parralèles.

Alors cron te convient parfaitement, sachant que tu peux lancer un "pré-script" qui testera si ton script principal est déjà lancé.

Poste le Tuesday 10 February 2009 18:48:15
Répondre     Citer    
Re: Lancer un script shell en daemon
Envoyé par: axel

NBaH a écrit:
-------------------------------------------------------
> À voir quelqu'un utiliser trop souvent un même
> mot, je me demande toujours s'il comprend bien ce
> que recouvre sa notion ?
>
> Qu'as tu compris du fonctionnement d'un daemon ?
> Pas grand chose, il semblerait, puisque tu crois
> qu'il faut un logiciel annexe pour le créer.
>
> Mais, pourquoi utiliser php pour télécharger et
> encoder des fichiers...
> Mais, pourquoi deux scripts...
> ?

houla, on se calme. Je sais parfaitement ce qu'est un script shell, un daemon, un php-cli. Et je ne vais pas essayer de te le prouver...
Je peux tout à fait utiliser Cron mais ce que je souhaite c'est de controler rapidement et efficacement mes process automatiques, ma montée en charge sans avoir à tout recoder en shell. J'imagine que c'est humain: la question était donc plutot simple. Existe-t-il un daemonizer (pas sûr du terme exact) qui fonctionnerait comme Cron qui serait également capable de gérer les instances multiples, leur consommation de cpu, de mémoire...

Pourquoi php: parce que je maitrise ce langage, parce que cela m'aurait pris 15x plus de tps à écrire en Perl (meme si j'y serai arrivé)

pourquoi deux scripts: pour séparer les taches, les actions. pour pouvoir controler l'un et l'autre, pour pouvoir les lancer séparamment, parce que l'un ne dépend pas de l'autre (je continue?).

Poste le Tuesday 10 February 2009 19:54:51
Répondre     Citer    
Re: Lancer un script shell en daemon
Envoyé par: oudoubah

La cron est très bien, mais dans certains cas, c'est beaucoup plus pratique de passer par un démon.

J'ai un squelette sous le coude, à toi à le compléter. Il est possible qu'il buggue au redémarrage de la machine, et dans ce cas un lancement manuel fonctionne (pour mes auters démons, je suis passé par une autre méthode).

#!/bin/sh

#delai d'activation
DELAI=5

PID=$$
PIDFILE=/var/run/$NOMSERVICE.pid

############## Commandes personnalisables : envoi de commandes au démon en cours #################

#trap commande1 USR1
#commande1() {
# echo commandes à exécuter
#}


#################  Corps du démon ######################
demon() {
        # Code du démon
}


###########  Partie générale - Ne pas modifier ############

getpid() {
        [ -e "$PIDFILE" ] && cat $PIDFILE
}

start() {
        if [ "$OLDPID" == "" ] ; then
                while /bin/true ; do
                        demon
                        delai
                done
        fi
}

stop() {
        PID="$(getpid)"
        if [ "$PID" != "" ] ; then
                kill -TERM $PID
                rm -f $PIDFILE
                echo "$NOMSERVICE arrêté"
        else
                echo "$NOMSERVICE déjà arrêté"
        fi
}

status() {
        PID="$(getpid)"
        if [ "$PID" != "" ] ; then
                echo "$NOMSERVICE OK : $PID"
        else
                echo "$NOMSERVICE KO"
        fi
}

delai() {
        sleep $((60 * $DELAI))
}

usage(){
        echo "Usage : $0 <start|stop|restart|debug|status>"
}

case "$1" in
        "start")
                disown $PID &>/dev/null
                OLDPID="$(getpid)"
                start &
                PID=$!
                if [ "$OLDPID" == "" ] ; then
                        echo "$NOMSERVICE lancé : $PID"
                        echo $PID > $PIDFILE
                else
                        echo "$NOMSERVICE déjà lancé : $OLDPID"
                fi
                ;;
        "stop")
                stop
                
                ;;
        "restart")
                stop
                
                PID=$$
                disown $PID &>/dev/null
                start &
                PID=$!
                echo "$NOMSERVICE lancé : $PID"
                echo $PID > $PIDFILE
                ;;
        "status")
                status
                ;;
        "debug")
                set +x
                start
                ;;
#  Commandes personnalisables
#       "commande1" )
#               status | grep -q OK
#               kill -USR1 $PID
#               ;;
        *)
                usage
                ;;
esac

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Wednesday 11 February 2009 10:46:53
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Lancer un script shell en daemon
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons