Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
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 25/04/2011, 17h44   #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 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
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 25/04/2011, 18h11   #2
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 fait ces étapes :
(sachant que le nom de mon application est test.jar)

Code :
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 :
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

Citation:
update-rc.d launcher defaults 99
puis pour le lancement :
Code :
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 :
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
 
:
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/04/2011, 18h57   #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
Enfet ca me genere ces erreurs malgres qu'en commande normal ca marche
(java -jar test.jar)
Code :
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
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 26/04/2011, 00h04   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
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_BaH est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/04/2011, 00h23   #5
Expert Confirmé Sénior
 
Avatar de ram-0000
 
Raymond
Inscription : mai 2007
Messages : 7 471
Détails du profil
Informations personnelles :
Nom : Raymond

Informations forums :
Inscription : mai 2007
Messages : 7 471
Points : 10 993
Points : 10 993
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

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.
WinAgentLog WinAgentLog est un service Windows qui collecte en temps réel les messages Microsoft EventLog et les retransmet en utilisant le protocole Syslog à une machine distante.
e-verbe Un logiciel de conjugaison des verbes de la langue française

Ma page personnelle sur DVP

ram-0000 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/04/2011, 02h07   #6
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Citation:
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_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2011, 10h56   #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
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 ?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 26/04/2011, 15h58   #8
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Citation:
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/
...
?
Citation:
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_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2011, 17h21   #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
ca marche aussi pour celle de sans probleme

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

Code :
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 ?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 28/04/2011, 15h59   #10
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 créee mon script sh qui contient
Code :
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 ?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 28/04/2011, 21h41   #11
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Citation:
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 :
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_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 10h45   #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
voila ce que j'ai fait
j'ai crée su .sh qui contient

Code :
java -jar /usr/bin/test.jar
que j'ai appelé script

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

Code :
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
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h53.


 
 
 
 
Partenaires

Hébergement Web