GNU/Linux >> Tutoriels Linux >  >> Linux

Attendez que le service démarre dans le script bash

Pour moi de lire l'état du service par rapport à service application :

$ /sbin/service network status
network.service - Network Connectivity
   Loaded: loaded (/lib/systemd/system/network.service; enabled)
   Active: active (exited) since Ср 2014-01-29 22:00:06 MSK; 1 day 15h ago
  Process: 15491 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)

$ /sbin/service httpd status 
httpd.service - SYSV: Apache is a World Wide Web server.  It is used to serve HTML files and CGI.
   Loaded: loaded (/etc/rc.d/init.d/httpd)
   Active: activating (start) since Пт 2014-01-31 13:59:06 MSK; 930ms ago

et cela peut être fait avec le code :

function is_in_activation {
   activation=$(/sbin/service "$1" status | grep "Active: activation" )
   if [ -z "$activation" ]; then
      true;
   else
      false;
   fi

   return $?;
}

while is_in_activation network ; do true; done

Utilisez grep -q . Le -q l'option fait grep silencieux, et il se fermera immédiatement lorsque le texte apparaîtra.

La commande ci-dessous commence ./some-service en arrière-plan et se bloque jusqu'à ce que "Le serveur est actif" s'affiche sur la sortie standard.

(./some-service &) | grep -q "Server is active"

Je ferais ainsi.

./server > /tmp/server-log.txt &
sleep 1
while ! grep -m1 'Server is active' < /tmp/server-log.txt; do
    sleep 1
done

echo Continue

Ici -m1 dit grep(1) abandonner au premier match.

J'ai vérifié ma réponse avec mon jouet "service" ci-dessous :

#! /bin/bash

trap "echo 'YOU killed me with SIGPIPE!' 1>&2 " SIGPIPE

rm -f /tmp/server-output.txt
for (( i=0; i<5; ++i )); do
    echo "i==$i"
    sleep 1;
done
echo "Server is active"
for (( ; i<10; ++i )); do
    echo "i==$i"
    sleep 1;
done
echo "Server is shutting down..." > /tmp/server-output.txt

Si vous remplacez echo Continue avec echo Continue; sleep 1; ls /tmp/server-msg.txt , vous verrez ls: cannot access /tmp/server-output.txt: No such file or directory ce qui prouve que l'action "Continuer" a été déclenchée juste après la sortie de Server is active .


Linux
  1. Quel service Systemd démarre la console de texte sur le périphérique Framebuffer ?

  2. Debian - Service actif mais (quitté) ?

  3. Service du système d'exploitation Linux "dhcpd"

  4. Service d'exploitation Linux "anacron"

  5. Service d'exploitation Linux "iptables"

Commande d'attente bash

Bash jusqu'à la boucle

Service d'exploitation Linux "hplip"

Centos 7 :Prise en main

Exécuter une application Java en tant que service sous Linux

Bash :attendez que l'utilisation du processeur passe en dessous d'un certain seuil