Inicie os scripts do Linux sequencialmente com o bloqueio

2

Eu quero criar um script para iniciar dois scripts diferentes em sequência.

O primeiro script inicia um servidor de aplicativos, que, embora o processo tenha iniciado (e eu esteja de volta no prompt), ele só aceitará a conexão após uma mensagem 'certa' em seu log; 'Servidor Blah Blah começou!'.

O segundo script essencial se conecta ao servidor e faz algumas coisas extras.

Como posso criar um script de inicialização para que o segundo script só comece depois do primeiro?

    
por n002213f 18.08.2010 / 15:34

3 respostas

0

Uma amostra de como você faria o que você quer em perl.

#!/usr/bin/perl

use strict; 
use warnings;

# Start the first script
my $first_script = '/script1.sh';

my $string_to_find = 'Server Blah Blah started';
my $string_not_found = 1;
my $counter = 0; # counter ofcourse start at 0
my $timer = 300; # since your sleep is set for 1 second this will 
                 # count to 300 before exiting

while($string_not_found){
    exit if ($counter > $timer); # this will make the application exit 
                                 # if the give timer is hit
                                 # you can aswell replace it by
                                 # $string_not_found = 0 if...
                                 # if you want it to run the 2nd code
                                 # as an attempt instead of only exiting
    my $last_line = 'tail -1 /my/app/log/file.out';
    if($last_line =~ /$string_to_find/ig) {
        $string_not_found = 0;
    }else {
        # sleep a little
     $counter++;
        sleep 1;
    }
}
# By the time we are here we are good to go with the next script.
my $second_script = '/script2.sh';
print 'Finished';
exit;

Com o código acima, o segundo programa só será executado se a palavra for encontrada assim que o primeiro programa terminar a impressão de saída.

UPDATE: Se o programa não produz o que você quer, mas existe um arquivo de log onde ele irá escrever a informação que você precisa, você pode usá-lo dentro do perl para que você não fique limitado.

    
por 18.08.2010 / 15:44
1

./script1 && ./script2
O & & significa "executar a segunda parte apenas quando a primeira parte tiver sido concluída com êxito, diferente de: ./script1; ./script2
Qual faz a primeira parte, então a segunda parte. Essencialmente, porém, sem forking ou threading (alguns métodos têm isso inerentemente), praticamente toda programação que você faz é imperativo e faz uma coisa (até o fim) de cada vez. Se você precisar segurar, escreva um WHILE no seu idioma que faça um loop até que (qualquer condição) seja verdadeira.

    
por 18.08.2010 / 15:37
0
#!/usr/bin/perl

# Start the first script
$first_script = '/script1.sh';

$string_to_find = 'Server Blah Blah started';
$string_not_found = 1;
while($string_not_found){
    $last_line = 'tail -1 /my/app/log/file.out';
    if($last_line =~ /$string_to_find/ig) {
        $string_not_found = 0;
    }else {
        # sleep a little
        sleep 1;
    }
}
# By the time we are here we are good to go with the next script.
$second_script = '/script2.sh';
print 'Finished';
exit;

#TODO: Add some sort of counter to abort incase we don't get the string we are searching.
    
por 18.08.2010 / 16:50