Précédent   Forum des professionnels en informatique > Systèmes > Linux > Distributions > Ubuntu
Ubuntu Vos questions sur les distributions Ubuntu et dérivées (Kubuntu, Xubuntu... )
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/06/2011, 17h38   #1
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
Par défaut Creation d'un daemon sous ubuntu

Bonjour,
j'ai crée un script 'SC1' contenant la commande suivante :

Code :
1
2
#!/bin/bash
nohup java -jar /home/usr/Bureau/application.jar
par la suite , je l'ai copié dans le fichier / usr et /bin

Code :
cp /home/usr/Bureau/SC1 /usr/bin/SC1
après j'ai fait les étapes suivantes :
Code :
cp /etc/init.d/skeleton /etc/init.d/SC1
Code :
1
2
3
4
5
6
7
8
gedit /etc/init.d/SC1
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="Description du service"
NAME=SC1
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="--options args"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
Code :
1
2
chmod +x /etc/init.d/SC1
update-rc.d SC1 defaults
mais en faisant ca ne marche pas , est ce normal?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 23/06/2011, 18h19   #2
Rédacteur/Modérateur
 
Avatar de lavazavio
 
Homme
Inscription : décembre 2004
Messages : 1 653
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : décembre 2004
Messages : 1 653
Points : 2 025
Points : 2 025
Bonjour,

Il faut définir les arguments start et stop dans ton script d'init.d.
Tu appelles start mais s'il n'existe pas, cela ne fonctionnera surement pas.

Jettes un oeil dans un des scripts contenus dans /etc/init.d pour comprendre leur fonctionnement. Cela t'aidera beaucoup.
__________________
Rédacteur et Modérateur rubrique Linux
Articles dvp.com
Man pages en français
lavazavio est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 24/06/2011, 12h01   #3
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
voila mon fichier dans /etc/init.d :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
 GNU nano 2.2.4                                      File: /etc/init.d/qos                                                                                  
 
#! /bin/sh
### BEGIN INIT INFO
# Provides:          skeleton
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO
 
# Author: Foo Bar <foobar@baz.org>
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
 
# Do NOT "set -e"
 
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=" "
NAME=qos
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="--options args"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
 
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
 
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
 
#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
        # Add code here, if necessary, that waits for the process to be ready
        # to handle requests from services started subsequently which depend
        # on this one.  As a last resort, sleep for some time.
}
 
#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}
 
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
        #
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        #
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
}
 
case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
 restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
        exit 3
        ;;
esac
 
:
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/06/2011, 17h40   #4
Membre du Club
 
Avatar de aysheaia
 
E L
Inscription : juin 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : E L
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 19
Points : 62
Points : 62
Citation:
Envoyé par marouene_ Voir le message
NAME=qos
DAEMON=/usr/bin/$NAME
[...]
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
Le programme que tu invoques s'appelle qos et non plus SC1.
Est-ce que /usr/bin/qos existe vraiment ?

(EDIT : et est exécutable ?)
aysheaia est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 25/06/2011, 00h12   #5
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
oui il s'appel qos.... il figure dans /usr/bin...
apparament le script de mon daemon ne permet pas de le relancer automatiquement en cas d'arret de service non?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/06/2011, 07h51   #6
Membre du Club
 
Avatar de aysheaia
 
E L
Inscription : juin 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : E L
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 19
Points : 62
Points : 62
Citation:
Envoyé par marouene_ Voir le message
apparament le script de mon daemon ne permet pas de le relancer automatiquement en cas d'arret de service non?
Sur cette question là, les scripts init.d ne le permettent pas.
Il faut utiliser d'autres mécanismes, comme :
- écrire un script de surveillance / relance et l'intégrer dans une crontab
- utiliser des outils dédiés (comme monit)
- déclarer le lancement de la commande dans le fichier /etc/inittab (pour les systèmes qui l'utilisent encore) avec l'action respawn (solution pas propre)
aysheaia est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/06/2011, 20h45   #7
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
laquelle est la plus utilisé?
Est ce que je peux créer par exemple un crontab qui me permet de relancer mon application en cas d'arret?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 26/06/2011, 21h05   #8
Membre du Club
 
Avatar de aysheaia
 
E L
Inscription : juin 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : E L
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 19
Points : 62
Points : 62
Citation:
Envoyé par marouene_ Voir le message
Est ce que je peux créer par exemple un crontab qui me permet de relancer mon application en cas d'arret?
Oui, par exemple comme dans http://bash.cyberciti.biz/web-server...-shell-script/
aysheaia est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 26/06/2011, 23h11   #9
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
mon daemon fonctionne c'est bon

je le lance désormais avec
Citation:
service qos start
pour créer le crontab, je dois faire ca ?
Citation:
#!/bin/bash
-------------------------------------------------------------------------
# Copyright (c) 2003 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------

# uncomment if you are using Debian / Ubuntu Linux
#RESTART="/etc/init.d/qos restart"

#path to pgrep command
PGREP="/usr/bin/pgrep"

# Httpd daemon name,
# Under RHEL/CentOS/Fedora it is httpd
# Under Debian 4.x it is apache2
Qos="qos"

# find httpd pid
$PGREP ${Qos}

if [ $? -ne 0 ] # if apache not running
then

$RESTART
fi
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/06/2011, 08h05   #10
Membre du Club
 
Avatar de aysheaia
 
E L
Inscription : juin 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : E L
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 19
Points : 62
Points : 62
Il faut enlever le # devant la définition de la variable RESTART
Sinon, si la commande pgrep existe sur ton poste et est bien sous /usr/bin/pgrep, c'est bon.

Il suffit maintenant de créer la crontab :
- soit créer une entrée dans la crontab d'un utilisateur qui a le droit de lancer la commande "/etc/init.d/qos restart" (par exemple, l'utilisateur root)
Lancement toutes les minutes :
$ crontab -l
* * * * * /path/to/script.sh >/dev/null 2>&1
- soit rajouter un fichier dans /etc/cron.d (la syntaxe est légèrement différente)
Lancement toutes les minutes :
$ cat /etc/cron.d/qos
* * * * * root /path/to/script.sh >/dev/null 2>&1

Je trouve que passer par un fichier dans /etc/cron.d est un petit peu plus propre
aysheaia est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 27/06/2011, 10h31   #11
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
Citation:
Envoyé par aysheaia Voir le message
Il faut enlever le # devant la définition de la variable RESTART
Sinon, si la commande pgrep existe sur ton poste et est bien sous /usr/bin/pgrep, c'est bon.

Il suffit maintenant de créer la crontab :
- soit créer une entrée dans la crontab d'un utilisateur qui a le droit de lancer la commande "/etc/init.d/qos restart" (par exemple, l'utilisateur root)
Lancement toutes les minutes :
$ crontab -l
* * * * * /path/to/script.sh >/dev/null 2>&1
- soit rajouter un fichier dans /etc/cron.d (la syntaxe est légèrement différente)
Lancement toutes les minutes :
$ cat /etc/cron.d/qos
* * * * * root /path/to/script.sh >/dev/null 2>&1

est

Je trouve que passer par un fichier dans /etc/cron.d est un petit peu plus propre
est ce que toute les minutes il relance le script ou il vérifie s'il est fermé ou non? si c'est le cas il le relance?

pour la commande pgrep, elle existe, quand je fait whereis pgrep j'ai ca comme résultat

Code :
/usr/bin/pgrep /usr/share/man/man1/pgrep.1.gz
autre question , d'après ce que j'ai compri, je dois faire un nouveau fichier sous /etc/cron.d et mettre la commande cu contab

Code :
1
2
$ cat /etc/cron.d/qos    // pour creer le fichier
* * * * * root /home/usr/Bureau/qos >/dev/null 2>&1    // pour lancer le fichier que j'ai crée
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/06/2011, 10h44   #12
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
j'ai essayé les deux méthode ,
la 1ere me dit, no crontab for root
la 2eme : cat: qos: No such file or directory

donc j'ai fait ca

j'ai par la suite crée le premier fichier contenant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
-------------------------------------------------------------------------
# Copyright (c) 2003 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------
 
# uncomment if you are using Debian / Ubuntu Linux
RESTART="/etc/init.d/qos restart"
 
#path to pgrep command
PGREP="/usr/bin/pgrep"
 
# Httpd daemon name,
# Under RHEL/CentOS/Fedora it is httpd
# Under Debian 4.x it is apache2
Qos="qos"
 
# find httpd pid
$PGREP ${Qos}
 
if [ $? -ne 0 ] # if not running
then
 
$RESTART
fi
que j'ai enregistré sous
Citation:
/home/usr/Bureau/cronqos.sh
j'ai par la suite fait :

Code :
1
2
nano /etc/cron.d/qos
* * * * * root /home/usr/Bureau/cronqos.sh >/dev/null 2>&1
sachant que j'ai arreté mon service ( service qos stop) pour voir si le cron marche ou non

et bien rien ne change
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/06/2011, 11h58   #13
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
quand j'essaye le script tous seul, je recoit ce message :
Code :
1
2
3
4
 
sh /home/usr/Bureau/cronqos.sh
/home/usr/Bureau/cronqos.sh: 2: -------------------------------------------------------------------------: not found
start-stop-daemon: unable to open pidfile '/var/run/qos.pid' for writing (Permission denied)
donc le cron doit se lancer en tant que root....
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/06/2011, 18h08   #14
Membre du Club
 
Avatar de aysheaia
 
E L
Inscription : juin 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : E L
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 19
Points : 62
Points : 62
Citation:
Envoyé par marouene_ Voir le message
est ce que toute les minutes il relance le script
Oui

Citation:
Envoyé par marouene_ Voir le message
ou il vérifie s'il est fermé ou non?
Non
Si tu penses que le démarrage peut prendre plus d'une minute, il vaut mieux lancer le script toutes les x minutes. Par exemple, pour un lancement toutes les 5 minutes :
Code :
1
2
 
*/5 * * * * root /home/usr/Bureau/qos >/dev/null 2>&1

Citation:
Envoyé par marouene_ Voir le message
autre question , d'après ce que j'ai compri, je dois faire un nouveau fichier sous /etc/cron.d et mettre la commande cu contab

Code :
1
2
$ cat /etc/cron.d/qos    // pour creer le fichier
* * * * * root /home/usr/Bureau/qos >/dev/null 2>&1    // pour lancer le fichier que j'ai crée
Oui.
Il suffit juste de s'assurer que le compte root peut exécuter le script.
Et enlever le commentaire style C++ :
Code :
1
2
 
  // pour lancer le fichier que j'ai crée
qui n'est pas un commentaire valide en bash...

Concernant le message :
Citation:
Envoyé par marouene_ Voir le message
sh /home/usr/Bureau/cronqos.sh
/home/usr/Bureau/cronqos.sh: 2: -------------------------------------------------------------------------: not found
start-stop-daemon: unable to open pidfile '/var/run/qos.pid' for writing (Permission denied)
Oui, le script cronqos.sh a pour rôle de lancer, si nécessaire, un démon ; or un démon est sensé être lancé via le compte root. C'est pour ça que, dans la crontab /etc/cron.d/qos, le 6ème champ vaut root
aysheaia est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/06/2011, 18h15   #15
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
enfet je t'explique, moi j'ai crée mon daemon ( qui contient mon application .jar) , je l'ai nommé qos... il fonctionne :

Code :
1
2
service qos start
service qos stop
mais je rencontre parfois des problemes au niveau de mon application ( arret du daemon) , ce que je veux, c'est à chaque fois que je detecte un arret du daemon, je le relance automatiquement....

Mon application fait des traitement séquentiels , si à chaque minute le cron relance l'application je terminerai jamais tous les traitements mais je ferai seulement les 1er.


est ce que le cron que j'ai crée relance l'application si elle est arreté ou bien il la relance tout simplement chaque minute indépendamment du fait qu'elle fonctionne ou non...car si c'est le ca.... je n'aurai que le 1er traitement qui se refait...


merci à vous
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/06/2011, 18h30   #16
Membre du Club
 
Avatar de aysheaia
 
E L
Inscription : juin 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : E L
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 19
Points : 62
Points : 62
Citation:
Envoyé par marouene_ Voir le message
est ce que le cron que j'ai crée relance l'application si elle est arreté
Oui

Citation:
Envoyé par marouene_ Voir le message
ou bien il la relance tout simplement chaque minute indépendamment du fait qu'elle fonctionne ou non...car si c'est le ca.... je n'aurai que le 1er traitement qui se refait...
Non

C'est le rôle du code :
Code :
1
2
3
4
5
6
7
 
# find qos pid
$PGREP ${Qos}
 
if [ $? -ne 0 ] # if not running
then
$RESTART
aysheaia est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/06/2011, 18h58   #17
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
Effectivement, c'est ce que je pensais, car j'ai bien tester le script avant de l'utiliser...

Je vais tester ca et te mettre au courant

marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/08/2011, 16h45   #18
Membre à l'essai
 
Inscription : mai 2008
Messages : 213
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2008
Messages : 213
Points : 24
Points : 24
Envoyer un message via ICQ à bender86
merci ça m'a bien aidé ici
bender86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h38.


 
 
 
 
Partenaires

Hébergement Web