Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/01/2016, à 11:48

Ap0c

[RESOLU] Commande curl avec init.d

Bonjour, j'essaye de lancer une commande curl lors de l'allumage du pc et une autre lors de l'extinction avec ce script init.d :

#! /bin/sh

### BEGIN INIT INFO
# Provides:          Domoticz
# Required-Start:    $remote_fs $syslog $network $time
# Required-Stop:    
# Should-Start:      
# Should-Stop:       
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Change la Variable osPcSalon
# Description:       Domoticz
### END INIT INFO

# Placez ici des commandes à exécuter à chaque appel du script
    echo 'Déclaration de démarrage dans Domoticz'
    
    # Le switch case ci-dessous permet de savoir si le système souhaite lancer ou arrêter le script (on le lance au démarrage et l'arrête à la fermeture du système)
    case "$1" in
        start)
            # Commande au démmarage
            curl 'http://192.168.1.92:8080/json.htm?type=command&param=updateuservariable&idx=1&vname=osPcSalon&vtype=2&vvalue=linux'
        ;;
    
        stop)
            # Commande à l'arret
            curl 'http://192.168.1.92:8080/json.htm?type=command&param=updateuservariable&idx=1&vname=osPcSalon&vtype=2&vvalue=other'
        ;;
    
        *)
            # Notice d'utilisation
            echo 'Usage: /etc/init.d/apiDomoticz {start|stop}'
            exit 1
        ;;
    esac
    
    exit 0

Au démarrage rien ne se passe alors que ma variable devrait switcher à "linux". A l'extinction de l'ordi le script fonctionne et switch bien la variable à "other".
Si je lance mon script une fois que l'ordi à fini son boot par la commande

/etc/init.d apiDomoticz start

la ma variable switch bien à "linux"

Peut etre l'interface réseau n'est pas disponible? Pourtant j'ai renseigné dans les paramètre

Required-Start:    $remote_fs $syslog $network $time

et je declare mon script avec

sudo update-rc.d apiDomoticz defaults 99

Dernière modification par Ap0c (Le 20/01/2016, à 22:59)

Hors ligne

#2 Le 19/01/2016, à 14:17

carreti

Re : [RESOLU] Commande curl avec init.d

Hello,
Je dis peut être une bêtise, mais est ce que curl est dispo au moment du lancement de la commande ? (dans le path)
Ça pourrait être intéressant de loguer le lancement en le rajoutant à la commande (avec peut être aussi une option -v)

curl -v 'http://192.168.1.92:8080/json.htm?type=command&param=updateuservariable&idx=1&vname=osPcSalon&vtype=2&vvalue=linux' >> /tmp/curl.log 2>&1

Dernière modification par carreti (Le 19/01/2016, à 14:24)


Utilisateur et administrateur de Linux et d'Unix (depuis le siècle dernier) et plus précisément ces dernières années de  Linux Gentoo et de Windows 10 ...
Je cherche du boulot sur Paris et RP Ouest en administration système ou mieux dans la tierce maintenance applicative, middleware, base de données, flux ...

Hors ligne

#3 Le 19/01/2016, à 15:52

Ap0c

Re : [RESOLU] Commande curl avec init.d

Ha bah voila une idée qu'elle est bonne: diriger le verbose de curl dans un fichier! j’essaie ca ce soir!

Bon et si effectivement l'ordi me retourne que curl n'est pas dispo à ce moment la l'idée serait de faire quoi? un autre script init.d qui s’exécute plus tôt? Une sorte de demon curl auquel je fait un :

sudo update-rc.d curl defaults 98

?

Hors ligne

#4 Le 19/01/2016, à 17:14

carreti

Re : [RESOLU] Commande curl avec init.d

Hello,

tout dépendra du message d'erreur récupéré, si message il y a ....
Peut être juste lui donner le chemin complet de l'exécutable.


Utilisateur et administrateur de Linux et d'Unix (depuis le siècle dernier) et plus précisément ces dernières années de  Linux Gentoo et de Windows 10 ...
Je cherche du boulot sur Paris et RP Ouest en administration système ou mieux dans la tierce maintenance applicative, middleware, base de données, flux ...

Hors ligne

#5 Le 19/01/2016, à 23:27

Ap0c

Re : [RESOLU] Commande curl avec init.d

Re

Voila la réponse de cUrl dans le log :

* Hostname was NOT found in DNS cache
*   Trying 192.168.1.92...
* Immediate connect fail for 192.168.1.92: Network is unreachable
* Closing connection 0
curl: (7) Couldn't connect to server

cUrl a l'air de bien faire son taf mais visiblement il n'y a pas de réseau à ce moment la. Du coup je sèche comment attendre que le réseau soit opérationnel ?

Hors ligne

#6 Le 20/01/2016, à 00:28

carreti

Re : [RESOLU] Commande curl avec init.d

Il faudrait que ton prog soit lancé après le réseau.
Je suis sur openrc (Gentoo) et je ne sais pas trop comment fonctionne update-rc.d, pourtant j'en ai bouffé de l'unix quand j'étais petit. wink
Faudrait lancer la commande qui liste les services et si possible dans l'ordre de lancement ...

Tu l'as récupéré ou cette commande ? C'est le 99 qui m'intrigue ...

sudo update-rc.d apiDomoticz defaults 99

Dernière modification par carreti (Le 20/01/2016, à 00:30)


Utilisateur et administrateur de Linux et d'Unix (depuis le siècle dernier) et plus précisément ces dernières années de  Linux Gentoo et de Windows 10 ...
Je cherche du boulot sur Paris et RP Ouest en administration système ou mieux dans la tierce maintenance applicative, middleware, base de données, flux ...

Hors ligne

#7 Le 20/01/2016, à 00:47

Ap0c

Re : [RESOLU] Commande curl avec init.d

Yop

Alors problème résolu avec du carton et de la colle ^^ J'ai rajouté un sleep 3 devant ma commande cUrl de démarrage qui donne :

sleep 3 ; curl 'http://192.168.1.92:8080/json.htm?type=command&param=updateuservariable&idx=1&vname=osPcSalon&vtype=2&vvalue=linux'

Bon en fait je pense comprendre; mon PC est en DHCP et à mon avis il lui faut un moment avant d'avoir sa adresse IP. J'ai testé un ping 127.0.0.1 à la place de la commande curl et ca fonctionne (si je me trompe pas ca indique au moin que le service reseau est lancé), par contre un ping 192.168.1.92 ne fonctionnais pas. du coup j'ai testé avec un sleep et paf j'ai une réponse au ping.

Ce qui m'agace dans tout ca, c'est que le sleep à mon sens est basé sur un facteur aléatoire (temp) et j'aurais préféré un retour d’état de l'attribution de l'ip pour lancer le cUrl, mais la c'est un poil trop long à faire pour moi.

Tu l'as récupéré ou cette commande ? C'est le 99 qui m'intrigue ...

Je l'ai trouvé dans la doc pour init.d. Si j'ai bien compris c'est l'ordre d’exécution des script, par contre je sais pas si c'est upstart qui gère ça ou sysV

Merci pour vos réponse qui mon beaucoup aidé en tout cas!

Dernière modification par Ap0c (Le 20/01/2016, à 00:53)

Hors ligne

#8 Le 20/01/2016, à 05:10

carreti

Re : [RESOLU] Commande curl avec init.d

Ap0c a écrit :

Ce qui m'agace dans tout ca, c'est que le sleep à mon sens est basé sur un facteur aléatoire (temp) et j'aurais préféré un retour d’état de l'attribution de l'ip pour lancer le cUrl, mais la c'est un poil trop long à faire pour moi.

Après tout c'est pas plus mal, le risque après c'est que ça bloque ton démarrage en cas de problème réseau.

Ap0c a écrit :

Merci pour vos réponse qui mon beaucoup aidé en tout cas!

De rien ...


Utilisateur et administrateur de Linux et d'Unix (depuis le siècle dernier) et plus précisément ces dernières années de  Linux Gentoo et de Windows 10 ...
Je cherche du boulot sur Paris et RP Ouest en administration système ou mieux dans la tierce maintenance applicative, middleware, base de données, flux ...

Hors ligne

#9 Le 20/01/2016, à 07:14

MicP

Re : [RESOLU] Commande curl avec init.d

…je sais pas si c'est upstart qui gère ça ou sysV…

lsb_release -a

te donnera la version ubuntu qui a été installée.

Si tu utilise la 15.10, tu peux choisir entre systemd ou upstart.
La version 14.04 utilise upstart

=======
Tu peux aussi vérifier quelle page man de ces systèmes de démarrage a été installée.

man upstart
man systemd

Bien sûr, si la page man est absente, c'est que l'application correspondante n'a pas été installée.

Dernière modification par MicP (Le 20/01/2016, à 07:16)

Hors ligne

#10 Le 20/01/2016, à 22:59

Ap0c

Re : [RESOLU] Commande curl avec init.d

Après tout c'est pas plus mal, le risque après c'est que ça bloque ton démarrage en cas de problème réseau.

Pas faux!

Merci MicP pour l'astuce! Je passe en résolu du coup wink

Hors ligne