Acho que preciso resolver meu próprio problema ...
Aqui está um pedaço de Perl que eu inventei. Basicamente, eu encontro o final do arquivo de log do Apache e o memorizo. Em seguida, emito um reinício / recarregamento do Apache e vejo qual texto foi gravado no arquivo de log desde então. Se o texto contiver "retomar as operações normais", considero que o reinício / recarga tenha sido concluído. (Não tenho certeza se isso é verdade, mas parece que está na página do Apache em "Parando e Reiniciando" aqui: link )
Melhorias apreciadas.
my $lastPos;
sub textSinceLast {
my $logF = '/var/log/httpd/error_log'; # or wherever your Apache log file is
open( FH, '<', $logF ) || die( "Cannot open $logF" );
my $pos = sysseek( FH, 0, SEEK_END );
my $ret = "Still at mark";
if( defined( $lastPos ) && $pos != $lastPos ) {
sysseek( FH, $lastPos, SEEK_SET );
sysread( FH, $ret, $pos - $lastPos, 0 );
}
close( FH );
$lastPos = $pos;
return $ret;
}
textSinceLast();
'systemctl reload httpd'; # or "service restart apache2", or whatever your distro wants
for( my $i=0 ; $i<1000 ; ++$i ) { # give up after 10sec
select( undef, undef, undef, 0.01 ); # apparently a tricky way of sleeping for 10ms
my $text = textSinceLast();
if( $text =~ /resuming normal operations/ ) {
print "Detected restart on $i\n";
last;
}
}