Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     08 Jun 2001  13:56:34
 To : drcitynet kz
 Subject : Re: демон
 -------------------------------------------------------------------------------- 
 
 Здравствуй, dr@citynet.kz.
 
 dck> господа, подскажите почему сей кусочек кода работает неккоректно (не
 dck> пишется лог-файл), либо отправьте куда-нибуль читать про написание
 dck> демонов.
 
 dck> ###########################################################################
 dck> ########### #!/usr/bin/perl
 
 dck> use POSIX qw(setsid);
 
 dck> sub daemon_init;
 dck> sub sig_handler;
 dck> sub get_time;
 
 dck> $logfile = '>/var/log/billingd.log';
 
 dck> ################################
 dck> # Main program code starts here
 dck> #
 
 dck> daemon_init();
 
 dck> open (LOGFILE, $logfile) || die "Error opening $logile! $!\n";
 
 Предположим, у тебя open обломался. Куда полетит die после setsid()?
 Эксперимент показал, что при запуске из шелла - в тот терминал, из которого
 запущено, а, скажем, у программ, запущенных из pppd'шного ip-up, STDERR уже
 перенаправлен в /dev/null.
 
 dck> ($date, $time) = get_time(time);
 dck> #print "$date $time\n";
 dck> print LOGFILE "$date $time billingd sucessfully started\n";
 dck> until ($time_to_die) {
 dck>  sleep(1);
 dck>  print LOGFILE "running!\n";
 dck> }
 dck> print LOGFILE "$date $time billingd killed\n"; 
 dck> close (LOGFILE) || die "Error closing $logfile! $!\n";
 
 dck> sub daemon_init
 dck> {
 dck>  # fork and wait for parent exit
 dck>  $pid = fork;
 dck>  exit if $pid;
 dck>  die "Fork error! $!" unless defined($pid);
 dck>  # dissociate from the controlling terminal
 dck>  setsid();
 dck>  # set signal handler
 dck>  $SIG{INT} = $SIG{TERM} = $SIG{HUP} = \&sig_handler;
 dck> }
 
 dck> sub sig_handler 
 dck> {
 dck>  $time_to_die = 1;
 dck> }
 
 dck> sub get_time
 dck> {
 dck>  (my $sec,my $min,my $hour,my $mday, my $mon,my $year,my $wday,my $yday,my
 dck> $isdst) = localtime($_[0]);
 dck>  $year += 1900; $mon += 1;
 dck>   $sec = "0$sec" if (length($sec) < 2); $min = "0$min" if (length($min) <
 dck> 2); $hour = "0$hour" if (length($hour) < 2);  $mday = "0$mday" if
 dck> (length($mday) < 2); $mon = "0$mon" if (length($month) < 2); $year =
 dck> "0$year" if (length($year) < 2); return "$year-$mon-$mday",
 dck> "$hour:$min:$sec"; } ######################################################
 dck> #################################
 
 dck> зыж может кто-нибудь поможет чуть-чуть подправить get_time, чтоб оно
 dck> выглядело более элегантно. чувствую, что можно сделеть на регекспах, но
 dck> не знаю как реализовать условие 'меньше чем'
 
 use POSIX qw(strftime);
 
 man strftime
 
 Хинт: strftime умеет printf-like форматирование полей. То есть "%03d" даст
 тебе поле из трех цифр, заполненное с переди нулями.
 
 -- 
 Artem Chuprina                            E-mail: ran@ran.pp.ru
 Programmer                                  FIDO: 2:5020/371.32
 Memonet Ltd.                             Phone: +7-095-284-1356
 --- ifmail v.2.15dev5
  * Origin: NTV Internet (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: демон   Artem Chuprina   08 Jun 2001 13:56:34 
Архивное /ru.perl/1648320b22e54.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional