Debian-facile

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

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

#1 24-01-2017 20:39:48

galactic
Membre
Inscription : 16-01-2017

Init : disponibilité des services réseau?

Bsr,
J'ai un petit script qui effectue une requête vers un serveur.
Je veux que ce script soir éxécuté au démarrage de la machine, pour la création des liens symboliques vers /etc/init.d, j'ai effectué la commande :

root@pcarm:/home/hubert# update-rc.d myscript defaults


Les liens ont été créés avec les préfixes K20/S80.
Je me pose la question : comment ces niveaux de priorité ont-ils été choisis?

Par aiileurs dans les logs du démarrage, le script (qui fonctionne très bien en ligne de commande) renvoie :

Network is unreachable
 


Celà signifie donc que le script s'exécute au démarrage, mais comme le réseau n'est pas opérationnel, il ne peut pas exécuter sa requête.
D'ou ma question : comment gérer le lancement de ce script après que les fonctions réseau soient activées?

Hors ligne

#2 24-01-2017 21:41:48

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : Init : disponibilité des services réseau?

Salut !
Ton script doit démarrer après le démarrage du réseau.
Regarde ici : https://wiki.debian.org/LSBInitScripts/

Il te faut :

# Required-Start:    $network


Y3HGA-H

Hors ligne

#3 25-01-2017 22:16:00

galactic
Membre
Inscription : 16-01-2017

Re : Init : disponibilité des services réseau?

Hello,
Merci pour la réponse.
Mais le problème est assez délicat.
Il s'agit d'un petit code java qui effectue une requête vers un serveur. Ce code doit s'exécuter au démarrage de la machine.
Si j'intégre ce code dans la méthode init() d'une appli web qui s'exécute dans Tomcat, la requête s'effectue correctement.

Ensuite, je crée un script chargé du lancement de ce code java.
J'ai pour le bloc d'identification en tête du script :

### BEGIN INIT INFO
# Provides:          myscript
# Required-Start:    $remote_fs $syslog $network
# Required-Stop:     $remote_fs $syslog $network
# 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


La commande suivante me permet de créer les liens :

root@pcarm:/home/hubert# update-rc.d myscript start 91 2 3 4 5 . stop 9 0 1 6 .


J'ai donc les indices S91/K09 adjacents de ceux de Tomcat S92/K08.
Ensuite je lance ce script à partir d'une console:

root@pcarm:/home/hubert# /etc/init.d/myscript start


Idem la requête vers le serveur s'effectue correctement, l'application java a accès au réseau.

Par contre, au démarrage de la machine, le lancement automatique du script conduit à l'erreur :

java.io.IOException: Network is unreachable


Dans ce cas l'application java n'a pas accès au réseau.
Je ne vois pas ou se situe le problème : environnement incomplet et non opérationnel au moment de l'exécution du script ou autre?
Et ceci d'autant plus que dans le bloc d'identification, il est indiqué :

# Required-Start:    $remote_fs $syslog $network


Donc au moment de l'éxécution,le réseau devrait être opérationnel.

Dernière modification par galactic (25-01-2017 22:44:42)

Hors ligne

#4 27-01-2017 10:48:55

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : Init : disponibilité des services réseau?

Salut,
il faut maintenant se demander comment ta machine se connecte au réseau. Est-ce définit dans /etc/network/interfaces ? Dans ce cas ça ne devrait pas poser de soucis.
Je suppose plutôt que c'est network-manager ou wicd qui s'en chargent. Ces derniers sont démarrés plus tard, sans doute après ton script.

Du coup je te conseillerai bien de mettre une boucle au début de ton script (je ne connais pas java) :

tant que "pas d'accès réseau (ping...";
            sleep 1


Y3HGA-H

Hors ligne

#5 27-01-2017 22:25:26

galactic
Membre
Inscription : 16-01-2017

Re : Init : disponibilité des services réseau?

Bsr,
Carrément 2 minutes d'attente  :

 Thread.sleep(120000);


Même chose : pas d'accès au réseau.

Je pense que le problème vient de l'environnement à partir duquel est lancé le script.
Dans le post précédent, je disais :

Si j'intégre ce code dans la méthode init() d'une appli web qui s'exécute dans Tomcat, la requête s'effectue correctement.


J'ai été un peu optimiste : le code fonctionne (accès réseau) si je démarre Tomcat à partir d'un shell utilisateur :
root@pcarm:/home/hubert#

service tomcat7 start


 * Starting Tomcat servlet engine tomcat7                                                                  [ OK ]



Par contre lors du démarrage de la machine (reboot ou mise sous tension), Tomcat est lancé automatiquement par le système; et mon code java n'a pas d accès au réseau.

Dernière modification par galactic (28-01-2017 10:42:41)

Hors ligne

Pied de page des forums