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 29/05/2013, à 22:40

morane

[RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Bonsoir,

J'ai fait le petit script suivant qui me dit si mon serveur est en marche ou pas à partir d'un PC client.

#!/bin/bash
# script testant l'ip du serveur et affichant un message s'il est en marche
# et un autre dans le cas contraire

ping -c3 192.168.2.160
TEST=$?

if [ $TEST -ne 0 ]
    then
        zenity --info\
	 --text="Le serveur est à l'arret"
    else
        zenity --info\
 	 --text="Le serveur est en marche"
fi

En fait, j'aimerais que:

  1. le script se lance tout seul toutes les minutes par exemple

  2. le script ne demande pas une réponse ou une validation

  3. le script affiche un feu vert ou un feu rouge en fonction de la réponse

Même si j'ai fait un peu de programmation dans le passé, je découvre les scripts sur Ubuntu, et donc un bon coup de main me débloquerait.

Merci de l'aide

Dernière modification par morane (Le 01/06/2013, à 00:15)


Ubuntu 18.04 et 20.04 MATE installés en dual boot avec Seven et Win 8 sur plusieurs PC différents
Un serveur raid avec Ubuntu 18.04
Bricole sur Ubuntu depuis la version 7.04

Hors ligne

#2 Le 29/05/2013, à 23:48

Zakhar

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Tu ne penses pas que ça risque d'être assez pénible pour toi de prendre une fenêtre modale dans la figure toutes les minutes !..

Du coup, comme à chaque fois, il vaudrait mieux affiner ton besoin. wink

Sinon:
-1) Tu fais un "cron"
-2) Si tu tiens à avoir une grosse fenêtre modale... regarde les options de Zenity, il y a une option "time-out" qui va fermer automatiquement la fenêtre même si tu ne réponds pas. Mais probablement tu voudrais plutôt une notification (notify-send) voire même seulement une notification quand ça va mal.
-3) Pour ça tu peux plutôt utiliser les notifications de Zenity. On peut changer l'icone qui s'affiche... mais faut fouiller un peu, je n'ai pas en tête l'option !


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#3 Le 30/05/2013, à 03:16

Otyugh

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

S'il se lance pas à une heure précise, ce serait pas plus "intuitif" de juste utiliser une "while true" et un "sleep 60" dedans ? (n'y connaissant pas grand chose en "comment bien faire" ^^)

Hors ligne

#4 Le 30/05/2013, à 08:44

morane

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Bonjour à tous,

Effectivement Zakhar, après avoir écrit ce topic, j'ai fait un peu de recherche et je me suis intéressé à Cron. J'aime bien aussi l'idée de Otyugh, car un "while true" permettrait d'avoir un script "horloge" indépendant (ne demandant pas de bidouillage d'un fichier de configuration externe comme dans le cas de Cron). Je vais tester les deux idées ce soir si j'ai un peu de temps.

Je ne veux pas voir de grande fenêtre apparaitre sur mon PC client, qui est en fait un vieux portable Omnibook 6100 avec Ubuntu 8.04, me servant uniquement de lecteur multimédia (relié à la chaine hifi du salon). Sur le bureau de ce portable, j'ai deux lanceurs: le premier pour démarrer le serveur et le deuxième pour l'éteindre. Le problème, c'est qu'un utilisateur lambda (autre membre de la famille) ne sait jamais si le serveur est en marche ou pas, au moment où il souhaite écouter de la musique (via rhytmbox). Donc je souhaite avoir une espèce d'icone, ressemblant à un feu rouge (ou autre), disposée quelque part sur l'écran et indiquant l'état du serveur.

J'ai bidouillé un peu mon scrip en ajoutant des instructions pour faire apparaitre une notification, mais je n'ai pas réussi à faire apparaitre quoique ce soit.


Ubuntu 18.04 et 20.04 MATE installés en dual boot avec Seven et Win 8 sur plusieurs PC différents
Un serveur raid avec Ubuntu 18.04
Bricole sur Ubuntu depuis la version 7.04

Hors ligne

#5 Le 30/05/2013, à 14:40

Otyugh

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Encore une fois, je ne peut proposer que mon amateurisme en la matière, mais il me semble que conky pourrait faire ce que tu désires.
Il permet "facilement" d'afficher sur ton fond d'écran des informations, et notamment, exécutées par un script. Je vais peut-être justement tenter moi-même un script, mais plutôt pour avoir une pastille qui m'indique si le ping est "bon" ou "mauvais" sur ma connexion ^^ -Je te tiens au jus si personne de plus formé ne sort de sa boîte wink

Hors ligne

#6 Le 30/05/2013, à 17:12

xavier4811

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Amusant ça, plein de possibilités différentes rien qu'avec while true.
ou alors conky devrait aussi être une bonne alternative.

#!/bin/bash

VERT="\\033[1;32m"
ROUGE="\\033[1;31m"
NORMAL="\\033[0m"
FEU_ROUGE="feu_rouge.jpg"
FEU_VERT="feu_vert.jpg"
ADDRESS="192.168.2.160"

# Télécharge un feu rouge et un feu vert pour Eye of Gnome et Zenity, a changer ou supprimer si ...
if [[ ! -e /home/${USER}/${FEU_VERT} ]]
then 
    wget -nd http://www.qualitec.ch/gfx/graphic/feu_vert.jpg -p /home/${USER}
fi
if [[ ! -e /home/${USER}/${FEU_ROUGE} ]]
then 
    wget -nd http://www.qualitec.ch/gfx/graphic/feu_rouge.jpg -p /home/${USER}
fi

# Boucle sans fin ...
while true
do
    ping -c3 "$ADDRESS" > /dev/null
    TEST=$?
    clear
    if [ $TEST -ne 0 ]
        then
            # Commente les notifications non désirées
            # Affichage dans le terminal
            echo -e $ROUGE "ARRET" $NORMAL
            # Image affichée dans Eye of Gnome, remplace eog par la visionneuse de ton choix
            eog /home/${USER}/${FEU_ROUGE} &
            # Zenity notification
            zenity --notification --window-icon="/home/${USER}/${FEU_ROUGE}" --text="ARRET" --timeout=30
        else
            # Commente les notifications non désirées
            # Affichage dans le terminal
            echo -e $VERT "DEMARRE" $NORMAL
            # Image affichée dans Eye of Gnome, remplace eog par la visionneuse de ton choix
            eog /home/${USER}/${FEU_VERT} &
            # Zenity notification
            zenity --notification --window-icon="/home/${USER}/${FEU_VERT}" --text="DEMARRE" --timeout=30
    fi
    sleep 15
    # Commente si tu n utilise pas de visionneuse d images,
    # kill la visionneuse après le temp de pause précédent
    killall eog
    # Au total 60 secondes avant de reboucler
    sleep 45
done

Hors ligne

#7 Le 30/05/2013, à 22:23

morane

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Ouah,

Excellent ce script
Merci xavier4811

Seul petit bemol, la visionneuse affiche un petit feu vert au milieu d'un grand carré noir. Existe t'il un moyen d'avoir juste une petite image ?

Otyugh, que veux tu dire en parlant d'une pastille ?


Ubuntu 18.04 et 20.04 MATE installés en dual boot avec Seven et Win 8 sur plusieurs PC différents
Un serveur raid avec Ubuntu 18.04
Bricole sur Ubuntu depuis la version 7.04

Hors ligne

#8 Le 30/05/2013, à 23:11

morane

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Comme je n'arrivais pas à réduire les images des feux vert et rouge, j'ai cherché un peu et j'ai modifié le script pour qu'il fasse apparaître des notifications

Voici ce que cela donne:

#!/bin/bash

# script testant si le serveur avec l'adresse ip 192.168.2.160 est en marche
# si oui, il affiche un message pendant 5 secondes
# si non, il affiche un autre message pendant 5 secondes

ADDRESS="192.168.2.160"

# Boucle sans fin ...
while true
do
    ping -c3 "$ADDRESS" > /dev/null
    TEST=$?
    clear
    if [ $TEST -ne 0 ]
        then
            # cas où le serveur est à l'arrêt
            notify-send --icon="info" "Etat du serveur de musique" "A l'arrêt" --expire-time=5000
        else
            # cas où le serveur est en marche
            notify-send --icon="info" "Etat du serveur de musique" "En marche" --expire-time=5000
    fi
    sleep 5
    # Commente si tu n utilise pas de visionneuse d images,
    # kill la visionneuse après le temp de pause précédent
    killall eog
    # Au total 40 secondes avant de reboucler
    sleep 35
done

Merci à tous

Dernière modification par morane (Le 30/05/2013, à 23:11)


Ubuntu 18.04 et 20.04 MATE installés en dual boot avec Seven et Win 8 sur plusieurs PC différents
Un serveur raid avec Ubuntu 18.04
Bricole sur Ubuntu depuis la version 7.04

Hors ligne

#9 Le 30/05/2013, à 23:20

xavier4811

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Pas trouvé d'autres options pour eog, mais si tu ne l'utilise pas tu peut supprimer la ligne killall eog a la fin.

Hors ligne

#10 Le 30/05/2013, à 23:45

morane

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

je suis en train de chercher comment changer la couleur des notifications ou même d'y mettre une image.
Je sais c'est de la cosmétique, mais bon ...


Ubuntu 18.04 et 20.04 MATE installés en dual boot avec Seven et Win 8 sur plusieurs PC différents
Un serveur raid avec Ubuntu 18.04
Bricole sur Ubuntu depuis la version 7.04

Hors ligne

#11 Le 30/05/2013, à 23:51

Zakhar

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

morane a écrit :

car un "while true" permettrait d'avoir un script "horloge" indépendant (ne demandant pas de bidouillage d'un fichier de configuration externe comme dans le cas de Cron).

Ca s'appelle un "Whiler" (de l'instruction while sans fin).

Architecturellement c'est moche... et si tu voulais vraiment faire un truc précis à la minute c'est raté parce que le sleep 60 va se rajouter au temps des autres instructions, contrairement au 'cron'

Mais de façon pratique, oui bien sûr, ça fonctionne aussi, c'est juste que le cron est plus "propre".

Tu as aussi une différence que peut te faire pencher plutôt pour l'un ou l'autre :
- cron s'exécute en root, puisqu'il dépend de la machine et pas de/des l'utilisateur(s) logé(s)
- un "whiler", en général tu vas le lancer avec la session (dans l'init c'est très très très moche !) et donc il va plutôt s'exécuter avec les droits de la session en cours.

Donc si tu veux faire des choses qui nécessitent des droits root (ce qui n'est probablement pas le cas ici), tu n'a guère que le cron de "propre". Dans ton cas, probablement que les deux sont possibles, et si tu n'es pas trop sûr de ne pas faire de bêtises avec ton script, autant faire un whiler, ça limitera la casse en cas de problème. tongue

P.S.: le ping te dit juste que ton serveur est en vie... pas que les services qui doivent y tourner fonctionnent encore !.. Selon les services désirés, tu peux affiner, par exemple faire un wget si tu t'attends à avoir un serveur web "en vie".

Dernière modification par Zakhar (Le 30/05/2013, à 23:53)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#12 Le 31/05/2013, à 00:02

Otyugh

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Il pourrait aussi faire un un "fork" pour lancer le traitement de son programme, le whileur se contentant d'attendre et de lancer le fork, justement, comme ça la boucle des 60 secondes pour lancer le programme serait plus précis à la nanoseconde peut-être ? ^^

NB : par pastille c'est pareil que le feu je voulais dire, hein. Juste un truc rond coloré, qu'importe en fait.

Dernière modification par Otyugh (Le 31/05/2013, à 00:05)

Hors ligne

#13 Le 31/05/2013, à 08:51

morane

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Bonjour à tous et merci de vos explications et arguments.

Effectivement, le cron semble ressembler au coucou suisse (ou franc comtois) et le whiler au sablier, mais dans mon cas le PC client ne sert que comme lecteur multimédia. Il n'y a donc pas des tonnes d'instructions à réaliser et si l'ensemble se décale de quelques secondes, ce n'est pas grave.

Par ailleurs, c'est vrai que le ping montre que le serveur est au moins en phase de démarrage mais qu'il n'est pas forcément opérationel. Quelle serait par exemple la ligne d'instruction avec wget ?

Qu'est ce qu'un fork ?


Ubuntu 18.04 et 20.04 MATE installés en dual boot avec Seven et Win 8 sur plusieurs PC différents
Un serveur raid avec Ubuntu 18.04
Bricole sur Ubuntu depuis la version 7.04

Hors ligne

#14 Le 31/05/2013, à 17:06

Otyugh

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Je n'emploie pas les bons mots ^^
Ce que je voulais pointer, c'est que la critique de Zakhar était juste, et qu'un moyen simple de bricoler pour que les 60 secondes soit précises, c'est, en gardant le sablier "whiler" mais de lancer le traitement en fond de tache (./pingandputfeurougeoufeuvert.sh &). Fin... C'est pas important du tout, désolé de t'embrouiller avec de l'abstrait, je n'ai toujours pas eu le cœur de me lancer x)

Hors ligne

#15 Le 31/05/2013, à 18:38

xavier4811

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Selon les services a tester, curl est plus polyvalent que wget.
La liste des codes d'erreur illustre bien les possibilités.

$ curl -m 10 -s "http://192.168.2.160" > /dev/null 
$ echo $?
28
$ curl -m 10 -s "http://127.0.0.1" > /dev/null 
$ echo $?
0
$ man curl | awk ' { if(match($0,"EX")){x=1}; if(match($0,"AU")){ x=0 }; if(x){ if($0){ print } } }'
EXIT CODES
       There  are  a  bunch  of  different error codes and their corresponding
       error messages that may appear during bad conditions. At  the  time  of
       this writing, the exit codes are:
       1      Unsupported protocol. This build of curl has no support for this
              protocol.
       2      Failed to initialize.
       3      URL malformed. The syntax was not correct.
       5      Couldn’t resolve proxy.  The  given  proxy  host  could  not  be
              resolved.
       6      Couldn’t resolve host. The given remote host was not resolved.
       7      Failed to connect to host.
       8      FTP  weird  server  reply.  The  server  sent data curl couldn’t
              parse.
       9      FTP access denied. The server denied login or denied  access  to
              the  particular  resource or directory you wanted to reach. Most
              often you tried to change to a directory that doesn’t  exist  on
              the server.
       11     FTP  weird PASS reply. Curl couldn’t parse the reply sent to the
              PASS request.
       13     FTP weird PASV reply, Curl couldn’t parse the reply sent to  the
              PASV request.
       14     FTP  weird  227  format.  Curl  couldn’t  parse the 227-line the
              server sent.
       15     FTP can’t get host. Couldn’t resolve the host IP we got  in  the
              227-line.
       17     FTP  couldn’t  set  binary.  Couldn’t  change transfer method to
              binary.
       18     Partial file. Only a part of the file was transferred.
       19     FTP couldn’t download/access the given file, the RETR (or  simi-
              lar) command failed.
       21     FTP quote error. A quote command returned error from the server.
       22     HTTP page not retrieved. The requested  url  was  not  found  or
              returned  another  error  with  the HTTP error code being 400 or
              above. This return code only appears if -f/--fail is used.
       23     Write error. Curl couldn’t write data to a local  filesystem  or
              similar.
       25     FTP  couldn’t  STOR  file. The server denied the STOR operation,
              used for FTP uploading.
       26     Read error. Various reading problems.
       27     Out of memory. A memory allocation request failed.
       28     Operation timeout. The specified  time-out  period  was  reached
              according to the conditions.
       30     FTP  PORT  failed.  The PORT command failed. Not all FTP servers
              support the PORT  command,  try  doing  a  transfer  using  PASV
              instead!
       31     FTP  couldn’t use REST. The REST command failed. This command is
              used for resumed FTP transfers.
       33     HTTP range error. The range "command" didn’t work.
       34     HTTP post error. Internal post-request generation error.
       35     SSL connect error. The SSL handshaking failed.
       36     FTP bad download resume. Couldn’t continue  an  earlier  aborted
              download.
       37     FILE couldn’t read file. Failed to open the file. Permissions?
       38     LDAP cannot bind. LDAP bind operation failed.
       39     LDAP search failed.
       41     Function not found. A required LDAP function was not found.
       42     Aborted by callback. An application told curl to abort the oper-
              ation.
       43     Internal error. A function was called with a bad parameter.
       45     Interface error. A specified outgoing  interface  could  not  be
              used.
       47     Too many redirects. When following redirects, curl hit the maxi-
              mum amount.
       48     Unknown TELNET option specified.
       49     Malformed telnet option.
       51     The peer’s SSL certificate or SSH MD5 fingerprint was not ok.
       52     The server didn’t reply anything, which here  is  considered  an
              error.
       53     SSL crypto engine not found.
       54     Cannot set SSL crypto engine as default.
       55     Failed sending network data.
       56     Failure in receiving network data.
       58     Problem with the local certificate.
       59     Couldn’t use specified SSL cipher.
       60     Peer  certificate cannot be authenticated with known CA certifi-
              cates.
       61     Unrecognized transfer encoding.
       62     Invalid LDAP URL.
       63     Maximum file size exceeded.
       64     Requested FTP SSL level failed.
       65     Sending the data requires a rewind that failed.
       66     Failed to initialise SSL Engine.
       67     The user name, password, or similar was not  accepted  and  curl
              failed to log in.
       68     File not found on TFTP server.
       69     Permission problem on TFTP server.
       70     Out of disk space on TFTP server.
       71     Illegal TFTP operation.
       72     Unknown TFTP transfer ID.
       73     File already exists (TFTP).
       74     No such user (TFTP).
       75     Character conversion failed.
       76     Character conversion functions required.
       77     Problem with reading the SSL CA cert (path? access rights?).
       78     The resource referenced in the URL does not exist.
       79     An unspecified error occurred during the SSH session.
       80     Failed to shut down the SSL connection.
       82     Could  not  load  CRL  file,  missing  or wrong format (added in
              7.19.0).
       83     Issuer check failed (added in 7.19.0).
       XX     More error codes will appear here in future releases. The exist-
              ing ones are meant to never change.

Dernière modification par xavier4811 (Le 31/05/2013, à 18:39)

Hors ligne

#16 Le 31/05/2013, à 19:37

Zakhar

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

wget -ou curl que j'utilise préférentiellement, d'accord avec toi xavier4811- c'est si ton PC multimedia sert ses fichiers via un serveur Web (Apache ou autre).

L'usage basique est fort simple, tu rajoutes l'URL que tu veux après wget.
Si ça fonctionne, c'est que le serveur répond.
Sinon, le service Web n'est pas démarré ou tu as un autre problème (réseau, autre...)

Exemple:

wget http://www.google.com/index.html -O /dev/null

Bien sûr, tu remplaces le www.google.com/index.html de l'exemple par une URL sur ton PC qui te sert de serveur !
Dans la commande ci-dessus on a un -O /dev/null, parce qu'on se fiche de la page renvoyée par le serveur, on veut juste savoir si ça marche. Sans cela, wget va faire par défaut un fichier correspondant à l'URL demandée. En l'occurrence, dans l'exemple ci-dessus on aurait un fichier index.html sans l'option.
curl (qui n'est pas installé par défaut) a un comportement un peu différent. Par défaut il va envoyer la page sur la sortie standard (stdout) au lieu de la mettre dans un fichier.


Après je ne sais pas ce que tu entends pas "Serveur Multimedia". Si c'est un simple partage de fichier (Samba, NFS,...) il suffit de monter le partage et tester que le montage marche et que tu peux accéder à un fichier que tu sais exister.
Si c'est un serveur DLNA.... bah là je ne sais pas... mais tu dois bien trouver comment vérifier que ça marche plus finement qu'un "ping" en faisant une recherche sur ton moteur préféré.

Dernière modification par Zakhar (Le 31/05/2013, à 19:43)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#17 Le 01/06/2013, à 00:14

morane

Re : [RESOLU] Afficher un feu rouge ou un feu vert - etat serveur

Bonsoir à tous,

Mon serveur est en fait un ancien PC, avec des disques durs montés en raid et auquels j'accède par des partages samba. C'est vraiment quelque chose de simple, qui sert uniquement à faire du stockage.

Le système de notification me convient car il est facile à comprendre pour n'importe qui.
Je considère ce topic comme résolu.

Merci encore


Ubuntu 18.04 et 20.04 MATE installés en dual boot avec Seven et Win 8 sur plusieurs PC différents
Un serveur raid avec Ubuntu 18.04
Bricole sur Ubuntu depuis la version 7.04

Hors ligne