GNU/Linux >> Znalost Linux >  >> Linux

Počkejte, až se služba spustí v bash-scriptu

Abych si přečetl stav služby k service aplikace:

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

a lze to provést pomocí kódu:

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

Použijte grep -q . -q volba dělá grep tichý a po zobrazení textu se okamžitě ukončí.

Níže uvedený příkaz začíná ./some-service na pozadí a blokuje, dokud se na stdout neobjeví „Server je aktivní“.

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

Udělal bych to tímto způsobem.

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

echo Continue

Zde -m1 říká grep(1) odstoupit při prvním zápase.

Svou odpověď jsem potvrdil svou „službou“ hraček níže:

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

Pokud nahradíte echo Continue s echo Continue; sleep 1; ls /tmp/server-msg.txt , uvidíte ls: cannot access /tmp/server-output.txt: No such file or directory což dokazuje, že akce "Pokračovat" byla spuštěna hned po výstupu Server is active .


Linux
  1. Služba operačního systému Linux „dhcpd“

  2. Služba Linux OS „anacron“

  3. Linux OS Service „iptables“

  1. Linux OS Service ‚síť‘

  2. Služba „portmap“ operačního systému Linux

  3. Služba „audit“ operačního systému Linux

  1. Která služba Systemd spouští textovou konzoli na zařízení Framebuffer?

  2. Debian – služba je aktivní, ale (ukončena)?

  3. Služba operačního systému Linux „hplip“