Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 16-01-2017 16:49:29

galactic
Membre
Inscription : 16-01-2017

Exécution d'une application lors du démarrage

Bonjour,
J'ai une très petite application java (25 lignes) que je veux exécuter au démarrage (ce n'est pas un service, elle s'éxécute une seule fois en faisant une requête vers un serveur -donc avec le réseau opérationnel- , ensuite elle est inactive jusqu'à l'extinction de la machine). Je veux seulement qu'elle soit exécutée avant le démarrage du service tomcat7.

root@pcarm:/home/hubert# /opt/jdk1.7.0_60/bin/java -jar myapp.jar


Si je l'éxécute bien en mode console, j'ai bricolé des liens symboliques au niveau de rc2.d et rc3.d et fait un petit script (qui utilise seulement le start)) dans init.d mais je n'arrive pas a avoir une exécution au démarrage.
Des pistes à explorer, des conseils? Merci.

Hors ligne

#2 17-01-2017 13:43:15

Croutons
Membre
Distrib. : Handylinux 2.5 vers Jessie et Debian Stretch
Noyau : Linux 3.16.0-4-686-pae, Linux 4.9.0-3-686-pae
(G)UI : xfce
Inscription : 16-12-2016

Re : Exécution d'une application lors du démarrage

Bonjour
Une piste peut être dans ton home avec le ~/.config/autostart/, dans le répertoire tu créé un fichier.desktop
exemple: redshift.desktop

[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=redshift
Comment=
Exec=/usr/bin/redshift-config
OnlyShowIn=XFCE;
StartupNotify=false
Terminal=false
Hidden=false



par contre tu ne gère pas l'ordre de lancement, il faudrait peut être arrêter le service et inclure son lancement dans ton script
c'est une idée je suis pas un barbu moi biggreen.gif


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#3 17-01-2017 14:22:12

bendia
Admin stagiaire
Distrib. : Jessie
Noyau : 3.16.0-4-amd64
(G)UI : Gnome + XFCE + Console
Inscription : 20-03-2012
Site Web

Re : Exécution d'une application lors du démarrage

Salut smile

Tu es sur quelle version de Debian Voir le tuto : Trop cool d'indiquer son installation dans son profil ! tongue

Si c'est Debian8, c'est systemd le système d'init maintenant. A priori, il y a moyen de lancer des services de type oneshot (http://doc.fedora-fr.org/wiki/Systemd#A … oneshot.22) et d'utiliser des dépendances pour indiquer par exemple que tomcat nécessite en premier lieu que ton script ait bien été laça au préalable (genre Requires=ton_script.service dans le fichier de conf de tomcat, et Before=tomcat dans le fichier de conf de ton script).

Ceci-dit, j'ai jamais essayé encore hmm

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.
file-Re06858991f6f328b4907296ac5cea283

Hors ligne

#4 17-01-2017 14:28:46

frei
Membre
Lieu : Tours
Distrib. : Sid
Noyau : 4.9.0-1-amd64
(G)UI : Mate+Compiz
Inscription : 06-01-2017
Site Web

Re : Exécution d'une application lors du démarrage

Si ton tomcat se lance seul tu dois avoir quelque chose dans ce gout là :
/etc/init.d/tomcatX

Edites le et regarde ce qu'il y a dedans.
En fonction de ce que tu cherches à faire il te faudra ajouter les lignes correspondantes dans les options.

Si ton app doit être executée systématiquement même sur un "restart" je ferai une modification du script de démarrage de Tomcat (/usr/share/tomcatX/bin/startup.sh)

@Croutons
Si c'est une install standard de Tomcat à l’exécution de la session c'est déjà trop tard.

"Glory. Rotting flower." John Tardy 1989

Hors ligne

#5 20-01-2017 15:45:30

galactic
Membre
Inscription : 16-01-2017

Re : Exécution d'une application lors du démarrage

Bjr,
De retour après quelques mises au point sur une application web qui s'exécute dans Tomcat.
Finalement pour l'autre petite application "oneshot" qui n'est pas un service mais qui doit s'exécuter au démarrage en dehors de Tomcat, j'ai traité le cas comme un service, ce qui me semblait plus cohérent.
Donc l'application java horloge.jar (mise à l'heure du système) et sa lib est copiée dans /usr/local/lib/
Et dans /etc/init.d/ j'ai créé le script horloge avec les bons droits :

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

    DAEMON="/opt/jdk1.7.0_60/bin/java"
    DAEMON_OPT="-jar /usr/local/lib/horloge.jar"  # fichier à exécuter
    NAME="horloge.jar" # Nom du programme
    PIDFILE=/var/run/$NAME.pid
     
    PATH="/sbin:/bin:/usr/sbin:/usr/bin"
    export JAVA_HOME=/opt/jdk1.7.0_60
    export PATH=${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin
   
    test -e $DAEMON || exit 0
     
    . /lib/init/vars.sh
    . /lib/lsb/init-functions
     
    start_d () {
            log_daemon_msg "Start $NAME Daemon"
      start-stop-daemon --make-pidfile --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPT
    }    
    stop_d () {
      # pas d'arrêt du daemon : le start termine son exécution;donc seulement suppression du fichier *.pid
            log_daemon_msg "Stop $NAME Daemon"
            rm -f $PIDFILE
    }
     
    case "$1" in
        start)
                    start_d
                    ;;                  
  stop)
        stop_d
        ;;
    .......
 


root@pcarm:/home/hubert# ls -l /etc/init.d/horloge
-rwxr--r-- 1 root root 2015 Jan 20 13:37 /etc/init.d/horloge
 


Le seul souci sur ce script a été sur l'option -jar en début de DAEMON_OPT et le -- entre les 2 variables.

et pour créer les liens :

root@pcarm:/home/hubert# update-rc.d horloge defaults Adding system startup for /etc/init.d/horloge ...
   /etc/rc0.d/K20horloge -> ../init.d/horloge
   /etc/rc1.d/K20horloge -> ../init.d/horloge
   /etc/rc6.d/K20horloge -> ../init.d/horloge
   /etc/rc2.d/S20horloge -> ../init.d/horloge
   /etc/rc3.d/S20horloge -> ../init.d/horloge
   /etc/rc4.d/S20horloge -> ../init.d/horloge
   /etc/rc5.d/S20horloge -> ../init.d/horloge
 



Le code priorité est S20 alors que pour Tomcat j'ai S92 donc, c'est très bien mon appli s'exécute avant le démarrage de Tomcat.
Mais une question, n'ayant pas la possibilité de choix du niveau de priorité, comment celui-ci est-il attribué?
Ce n'est peut-être pas très académique comme solution, mais celà fonctionne.
Question annexe : j'ai mis en début de script une init des variables d'environnement java; j'ai aussi une init dans :

root@pcarm:/home/hubert# cat /etc/profile.d/jdk.sh
#!/bin/sh
export JAVA_HOME=/opt/jdk1.7.0_60
export MANPATH="${MANPATH}:${JAVA_HOME}/man"
export PATH=${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin
 


Cet environnement est mis en place lors de l'ouverture d'un shell; mais qu'en est-il sur un serveur ou l'on ne passe pas par un shell de connexion?

Dernière modification par galactic (20-01-2017 15:55:25)

Hors ligne

#6 20-01-2017 20:35:13

galactic
Membre
Inscription : 16-01-2017

Re : Exécution d'une application lors du démarrage

Bsr,
Petit souci,  si la commande :

root@pcarm:/home/hubert# /etc/init.d/horloge start
 * Start horloge.jar Daemon
 Fri Jan 20 19:30:17 CET 2017
 


fonctionne très bien (mise à l'heure effective)
Lorsque je redémarre la machine, il n'y a pas de mise à l'heure : donc le script ne serait pas exécuté lors d'un reboot.
Il y a bien exécution du script mais pas de mise à l'heure.
Avant d'effectuer un reboot, j'ai supprimé le fichier /run/horloge.jar.pid; et après un redémarrage, ce fichier, créé par le script, est bien présent.
Des idées?

Dernière modification par galactic (21-01-2017 13:39:11)

Hors ligne

Pied de page des forums