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.