Автор Тема: Perl Daemon или что-то еще...  (Прочитано 4354 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Perl Daemon или что-то еще...
« : 12 Апреля 2008, 06:29:52 »
Здравствуйте!

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

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

P.S. Сервер выделенный...
Космическая игрушка

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Perl Daemon или что-то еще...
« Ответ #1 : 14 Апреля 2008, 10:32:18 »
постоянно он не сможет висеть, в любом случае его нужно будет перезапускать при обвале, возможно даже кроном.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Perl Daemon или что-то еще...
« Ответ #2 : 14 Апреля 2008, 10:38:10 »
Это понятно...
Я сделал циклом со sleep...
Спасибо!
Космическая игрушка

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Perl Daemon или что-то еще...
« Ответ #3 : 18 Мая 2008, 03:06:05 »
Вот пример демона

#!/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];
}
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

 

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