hi
On Thu, 16 Dec 1999, igor sviridov writes:
>> одно "но" - если сервер лежит долго, то файликов в in.coming будет ооочень
>> много ;)
>
> /usr/local/bin/rnews-locking:
это и так понятно, но я не про кучу процессов, перемалывающих одни и те же
файлики, а про то, что даже одному процессу крайне сложно переварить 60-80
тысяч файликов в одном каталоге.
На самом деле inews - это диверсия, постить надо напрямую ihave() и
складывать статьи в один batch, если сервер лежит.
> trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15
тут, кстати, есть одна нехорошесть - в шеле нельзя alarm() поставить ;)
на перле я делаю так, можно и без shlock() обойтись, но тогда надо делать
самому то, что он делает...
# op: 1 - set lock, 0 - remove lock
sub maint_lock
{
my $op = shift;
my $shlock = "/usr/local/bin/shlock -p $$ -f";
my $fname;
my $smth;
my $timeout = 5*60; # give prev. proc 5 mins to complete
my $printed = 0;
my $lock = '/var/run/';
($fname,$smth) = split(/\//,reverse $0);
$fname = reverse($fname);
$lock .= "$fname\.lck";
if( $op )
{
$SIG{ALRM} = sub { die "FATAL: couldn't acquire lock withing $timeout seconds\n" };
alarm $timeout;
while( system("$shlock $lock") )
{
print STDERR "NOTE: The $fname script is already running, waiting...\n" if ! $printed;
$printed = 1;
sleep 2;
}
print STDERR "NOTE: Lock is acquired...\n" if $printed;
alarm 0;
}
else
{
unlink $lock;
}
}
-- rgds, serge -- end of forwarded message --
-- Мы все немножко люди, Kittle