ASE_DAG
Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #!/usr/bin/perl package CrownRU; use warnings; use XML::LibXML; use File::Path; use File::Copy; my $xml_parser = XML::LibXML->new(validate => 0, load_ext_dtd => 0); sub new { my ($class, $dir, $id) = @_; my $i = "$dir/$id"; -d $i or die "$i: $!"; my $self = { id => $id }; (my $id_ = $id) =~ tr,/,_,; $self->{initscript} = "$i/bin/$id_"; $self->{failed_dir} = "$i/failed"; $self->{system_dir} = "$i/system"; my $config = "$i/config/$id_.xml"; $self->{import_dir} = ($xml_parser ->parse_file($config) ->find('//placeholder[@name="importPath"]/node()') ->string_value()); return bless $self, $class; } sub id { my $self = shift; return $self->{id}; } sub start { my $self = shift; system $self->{initscript}, 'start'; } sub stop { my $self = shift; system $self->{initscript}, 'stop'; } sub process_failed { my $self = shift; my @idxs = glob "$self->{failed_dir}/*.idx" or return; $self->stop(); rmtree $self->{system_dir}; move $_, $self->{import_dir} for @idxs; $self->start(); } package main; use warnings; use Sys::Syslog qw(:standard :extended); use Getopt::Long; my $SCRIPTNAME = 'idxsafe'; my $syslog = 1; my $timeout = 5 * 60; GetOptions("no-syslog" => sub { $syslog = 0 }, "timeout=i" => \$timeout); @ARGV >= 1 or die ("Usage examples:\n" . " \$ $SCRIPTNAME /archive/obj/bastore\n" . " \$ $SCRIPTNAME /archive/obj/bastore N/NST_F3 F/FQP_RA\n"); openlog $SCRIPTNAME, 'pid', LOG_USER; $syslog or setlogsock 'stream', '/dev/stderr'; $SIG{__WARN__} = sub { syslog LOG_WARNING, @_ }; $SIG{__DIE__} = sub { syslog LOG_ERR, @_ }; my ($wd, @ids) = @ARGV; -d $wd or die "$wd: $!"; chdir $wd or die "$!"; my @instances = map { CrownRU->new($wd, $_) } (@ids ? @ids : glob '?/???_*'); @instances > 0 or die "No instances found"; syslog(LOG_INFO, "Started successfully on: %s", join ', ', map { $_->id } @instances); for (;;) { for (@instances) { $_->process_failed() and syslog LOG_INFO, "%s restored", $_->id; } exit if $timeout < 0; sleep $timeout; } | Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:57 31-08-2016 | Исправлено: ASE_DAG, 17:58 31-08-2016 |
|