IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Creer un daemon sous linux


Sujet :

Linux

  1. #1
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut Creer un daemon sous linux
    Bonjour,
    j'ai une application .jar et j'aimerai créer a partir de cette application un daemon qui s'execute tout seul et si l'application se bloque elle se re-execute....
    j'ai cherché un peu dans init.d mais je n'ai pas compris comment ca fonctionne*


    merci

  2. #2
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    j'ai fait ces étapes :
    (sachant que le nom de mon application est test.jar)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cp /home/test.jar /usr/bin/test.jar
    cp /etc/init.d/skeleton /etc/init.d/test.jar
    vim /etc/init.d/test.jar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PATH=/usr/sbin:/usr/bin:/sbin:/bin
    DESC="Description du service"
    NAME=test.jar
    DAEMON=/usr/bin/$NAME
    DAEMON_ARGS="--options args"
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    j'ai fait par la suite ca

    update-rc.d launcher defaults 99
    puis pour le lancement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chmod +x /etc/init.d/test22.jar
    etc/init.d/test22.jar start
    mais aprés rien ne se passe , on m'ecrit rien sur le terminal (juste curseur qui clignote)
    c'est bizarre

    voici mon fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    152
    153
    154
    155
    156
    157
    158
    159
     
    #! /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="maroueneapplication"
    NAME=test.jar
    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 --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
    		|| return 1
    	start-stop-daemon --start --quiet --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 $?
           ;;
      #reload|force-reload)
    	#
    	# If do_reload() is not implemented then leave this commented out
    	# and leave 'force-reload' as an alias for 'restart'.
    	#
    	#log_daemon_msg "Reloading $DESC" "$NAME"
    	#do_reload
    	#log_end_msg $?
    	#;;
      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
     
    :

  3. #3
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    Enfet ca me genere ces erreurs malgres qu'en commande normal ca marche
    (java -jar test.jar)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    it.sauronsoftware.ftp4j.FTPDataTransferException: java.io.FileNotFoundException: localFile.ico (Permission denied)
    	at it.sauronsoftware.ftp4j.FTPClient.download(FTPClient.java:3190)
    	at it.sauronsoftware.ftp4j.FTPClient.download(FTPClient.java:3098)
    	at marouene.TestFtp.calculdebitftp(TestFtp.java:35)
    	at marouene.TestPerformance$1RemindTask.run(TestPerformance.java:64)
    	at java.util.TimerThread.mainLoop(Timer.java:534)
    	at java.util.TimerThread.run(Timer.java:484)
    Caused by: java.io.FileNotFoundException: localFile.ico (Permission denied)
    	at java.io.FileOutputStream.open(Native Method)
    	at java.io.FileOutputStream.<init>(FileOutputStream.java:209)
    	at it.sauronsoftware.ftp4j.FTPClient.download(FTPClient.java:3188)
    	... 5 more

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Bonjour,

    ceci teste la version sous /home/, ou celle sous /usr/bin/ ?

    de plus, le script init lance test.jar, et non java -jar test.jar
    ...
    ?

    encore, une petite chose : le script sous /etc/init.d/ devrait porter l'extension .sh, puisque c'est un script sh !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    encore, une petite chose : le script sous /etc/init.d/ devrait porter l'extension .sh, puisque c'est un script sh !
    Pas tout à fait d'accord là. Dans le répertoire /etc/init.d on ne trouve bien souvent que des scripts (de démarrage et d'arrêt). L'usage montre que l'extension ".sh" n'est jamais utilisée dans ce répertoire.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    L'usage montre que l'extension ".sh" n'est jamais utilisée dans ce répertoire.
    j'en trouve sur Debian (bootmisc.sh par exemple).


    J'avais surtout à l'esprit "ne pas mettre une extension .jar à un script sh".
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    Pour répondre a votre question, java -jar test.jar lance bien la version de /home

    Dois-je créer un script .sh et mettre dedans la commande java -jar test.jar ?

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Pour répondre a votre questio, bein java -jar test.jar lance la version de /home
    mais si tu comptes utiliser la version sous /usr/bin/, c'est celle-ci qu'il faut tester : il y a peut-être des références à d'autres fichiers avec des chemins relatifs, qui sont accessibles depuis /home/ mais pas depuis /usr/bin/
    ...
    ?
    Dois creer un script .sh et mettre dedans la commande java -jar test.jar ?
    Je ne connais pas java, mais j'aurais tendance à dire oui; il faut adapter le script d'init pour lancer java, avec pour option -jar test.jar
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    ca marche aussi pour celle de sans probleme

    Sinon j'ai crée un script qui est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar /usr/bin/test.jar
    et j'ai refait les memes etapes mais ca n'a pas marché

    est ce que je dois spécifier le shell à utiliser dans mon script ?

  10. #10
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    j'ai créee mon script sh qui contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/bash
    java -jar /usr/bin*test.jar
    et il marche, mais le daemon ne marche pas comme d'habitude, est ce normal ?

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Je ne connais pas java, mais j'aurais tendance à dire oui; il faut adapter le script d'init pour lancer java, avec pour option -jar test.jar
    Je me suis mal exprimé : il faut adapter le script d'init (c'est à dire /etc/init.d/test.jar (mais ce script devrait porter l'extension sh car c'est un script shell)) pour lancer java, avec pour option -jar test.jar

    tu copies, et tu adaptes /etc/init.d/skeleton, vers /etc/init.d/testjar.sh, qui devrait contenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PATH=/usr/sbin:/usr/bin:/sbin:/bin
    DESC="lance une instance de java pour exécuter /usr/bin/test.jar"
    NAME=java
    DAEMON=/usr/bin/$NAME
    DAEMON_ARGS="-jar /usr/bin/test.jar"
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    ce qui va (re)démarrer/arrêter une instance de java, avec pour option -jar /usr/bin/test.jar

    non testé !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    voila ce que j'ai fait
    j'ai crée su .sh qui contient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar /usr/bin/test.jar
    que j'ai appelé script

    puis j'ai fait les etapes habituelles....
    et j'ai fait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PATH=/usr/sbin:/usr/bin:/sbin:/bin
    DESC="   "
    NAME=script
    DAEMON=/usr/bin/$NAME
    DAEMON_ARGS=" "
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    bon ca marche normalement,(enfin je pense que mon application marche), mais une fois qu'elle se bloque, elle ne se relance pas, il n'ya pas une méthode a faire pour que a chaque fois que ca se bloque on la relance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Creer un executable sous Linux et solaris à partir d'un .jar
    Par supertom dans le forum EDI et Outils pour Java
    Réponses: 3
    Dernier message: 06/06/2008, 14h55
  2. creer un daemon pour serveur sur linux
    Par timtima dans le forum POSIX
    Réponses: 8
    Dernier message: 19/12/2007, 02h31
  3. Créer et utiliser des fichiers excel sous linux
    Par cronos6 dans le forum Zope
    Réponses: 2
    Dernier message: 02/06/2006, 09h14
  4. Réponses: 7
    Dernier message: 30/03/2006, 16h49
  5. Creer une base de donnée sous linux
    Par nissarte dans le forum Installation
    Réponses: 2
    Dernier message: 01/03/2006, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo