Revision 3 (by ahitrov@rambler.ru, 2010/03/24 15:19:32) |
The CORE
|
package PidFile::File;
use strict;
use warnings 'all';
use Fcntl qw(:flock);
use FindBin;
sub new {
my ($class, $pid_dir, %opts) = @_;
die "PID directory required\n" unless $pid_dir && -d $pid_dir;
$pid_dir =~ s#/+$##;
my $self = {
file => "$pid_dir/".($opts{pid_name}||"$FindBin::RealScript.pid"),
host => $opts{host},
verbose => $opts{verbose},
};
bless $self, $class;
}
sub block {
my ($self, $now) = @_;
if (-f $self->{file}) {
warn "Found existing PID file, check for alive process...\n" if $self->{verbose};
open PID, "<$self->{file}" or die "Can't read existing PID file - $!\n";
chomp(local $_ = <PID>);
warn "Found previous PID: $_\n" if $self->{verbose};
unless (flock PID, LOCK_EX|LOCK_NB) {
if ($self->{verbose}) {
die "Found alive process, exit\n";
} else {
print "Found alive process, exit\n";
exit;
}
}
close PID;
warn "No alive process were found\n" if $self->{verbose};
}
open PID, ">$self->{file}" or die "Can't create PID file - $!\n";
flock PID, LOCK_EX or die "Can't lock PID files - $!\n";
select((select(PID), $|=1)[0]);
print PID $$;
$self->{handle} = *PID;
print "Created PID file (PID: $$) at ".localtime($now)."\n" if $self->{verbose};
}
sub release {
my ($self, $now) = @_;
return unless $self->{handle};
flock $self->{handle}, LOCK_UN;
close $self->{handle};
unlink $self->{file} or die "Can't unlink self PID file - $!\n";
print "Removed PID file (PID: $$) at ".localtime($now)."\n" if $self->{verbose};
return 0;
}
1;
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.