GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warten Sie, bis der Dienst im Bash-Skript gestartet wird

Damit ich den Status des Dienstes zu service lesen kann Anwendung:

$ /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

und es kann mit dem Code gemacht werden:

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

Verwenden Sie grep -q . Die -q Option macht grep ruhig, und es wird sofort beendet, wenn der Text erscheint.

Der folgende Befehl startet ./some-service im Hintergrund und blockiert, bis "Server is active" auf stdout erscheint.

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

Ich würde so vorgehen.

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

echo Continue

Hier -m1 sagt grep(1) beim ersten Spiel aufzuhören.

Ich habe meine Antwort mit meinem Spielzeug-"Service" unten bestätigt:

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

Wenn Sie echo Continue ersetzen mit echo Continue; sleep 1; ls /tmp/server-msg.txt , sehen Sie ls: cannot access /tmp/server-output.txt: No such file or directory was beweist, dass die "Weiter"-Aktion direkt nach der Ausgabe von Server is active ausgelöst wurde .


Linux
  1. Welcher Systemd-Dienst startet die Textkonsole auf dem Framebuffer-Gerät?

  2. Debian – Dienst aktiv, aber (beendet)?

  3. Was bedeutet Echo $? Tun??

  4. Linux-Betriebssystemdienst „iptables“

  5. Linux-Betriebssystemdienst „Netzwerk“

Bash-Wartebefehl

Bash bis Loop

Linux-Betriebssystemdienst „anacron“

Linux-Betriebssystemdienst „hplip“

Centos 7:Erste Schritte

Bash:Warten Sie, bis die CPU-Auslastung unter einen Schwellenwert fällt