Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

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
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru