Программирование > Perl

Perl Daemon или что-то еще...

(1/1)

Error202:
Здравствуйте!

У меня есть задача...
Скрипт должен постоянно висеть в памяти и раз в 5 секунд просматривать  файл и менять его при необходимости...

Как это лучше организовать?

P.S. Сервер выделенный...

Yaroslav:
постоянно он не сможет висеть, в любом случае его нужно будет перезапускать при обвале, возможно даже кроном.

Error202:
Это понятно...
Я сделал циклом со sleep...
Спасибо!

vladsu:
Вот пример демона

--- Код: ---
#!/usr/bin/perl

use strict;
use warnings;

use constant LOG_DIR    => \'/var/log/mydaemon\';
use constant LOG_FILE   => \'mydaemon.log\';
use constant PIDDIR     => LOG_DIR;

use Proc::PID_File;
use Proc::Daemon;
use Log::Dispatch;
use Log::Dispatch::File;
use Date::Format;
use File::Spec;

sub dienice ($);

#
# fork and background process
#
our $ME = $0; $ME =~ s|.*/||;
our $PIDFILE = PIDDIR."/$ME.pid";
startDaemon();

#
# Setup a logging agent
#
our $HOSTNAME = `hostname`;
chomp $HOSTNAME;
my $log = new Log::Dispatch(
      callbacks => sub { my %h=@_; return Date::Format::time2str(\'%B %e %T\', time)." ".$HOSTNAME." $0\\[$$]: ".$h{message}."\\
n"; }
);
$log->add( Log::Dispatch::File->new( name      => \'file1\',
                                     min_level => \'warning\',
                                     mode      => \'append\',

                                     filename  => File::Spec->catfile(LOG_DIR, LOG_FILE),
                                   )
);
$log->warning("Starting Processing:  ".time());


#
# Setup signal handlers so that we have time to cleanup before shutting down
#
my $keep_going = 1;
$SIG{HUP}  = sub { $log->warning("Caught SIGHUP:  exiting gracefully"); $keep_going = 0; };
$SIG{INT}  = sub { $log->warning("Caught SIGINT:  exiting gracefully"); $keep_going = 0; };
$SIG{QUIT} = sub { $log->warning("Caught SIGQUIT:  exiting gracefully"); $keep_going = 0; };
#$SIG{TERM} = sub { $log->warning("Caught SIGTERM:  exiting gracefully"); $keep_going = 0; };

#
# enter main loop
#
while ($keep_going) {

        # do something useful here


}

#
# Mark a clean exit in the log
#
$log->warning("Stopping Processing:  ".time());


#
# startDaemon
#
# Fork and detach from the parent process
#
sub startDaemon {

  #
  # Fork and detach from the parent process
  #
#  eval { close DATA; }; # having __END__ will trigger __DATA__ to open and should be closed
  eval { Proc::Daemon::Init; };
  if ($@) {
    dienice("Unable to start daemon:  $@");
  }

  #
  # Get a PID file
  #
  dienice("Already running!") if hold_pid_file($PIDFILE);
}

#
# dienice
#
# write die messages to the log before die\'ing
#
sub dienice ($) {
  my ($package, $filename, $line) = caller;
  $log->critical("$_[0] at line $line in $filename");
  die $_[0];
}

--- Конец кода ---

Навигация

[0] Главная страница сообщений

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии