GNU/Linux >> Linux Esercitazione >  >> Linux

Attendere fino all'avvio del servizio in bash-script

Per farmi leggere lo stato del servizio rispetto a service app:

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

e può essere fatto con il codice:

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

Usa grep -q . Il -q l'opzione rende grep tranquillo, e uscirà immediatamente quando appare il testo.

Il comando seguente inizia ./some-service in background e si blocca finché non viene visualizzato "Server is active" su stdout.

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

Io farei così.

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

echo Continue

Qui -m1 dice a grep(1) uscire alla prima partita.

Ho verificato la mia risposta con il mio "servizio" giocattolo di seguito:

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

Se sostituisci echo Continue con echo Continue; sleep 1; ls /tmp/server-msg.txt , vedrai ls: cannot access /tmp/server-output.txt: No such file or directory il che dimostra che l'azione "Continua" è stata attivata subito dopo l'output di Server is active .


Linux
  1. Quale servizio Systemd avvia la console di testo sul dispositivo Framebuffer?

  2. Servizio del sistema operativo Linux 'dhcpd'

  3. Servizio del sistema operativo Linux "anacron"

  4. Servizio del sistema operativo Linux "iptables"

  5. Sistema operativo Linux Servizio "rete"

Bash wait Comando

Bash fino a Loop

Servizio del sistema operativo Linux 'nfs'

Servizio del sistema operativo Linux 'microcode_ctl'

Servizio del sistema operativo Linux "NetFS"

Centos 7:Per iniziare