Forum Webscript.Ru
Наши скрипты => Sanitarium WebLoG => Тема начата: Pendulum от 17 Декабря 2004, 12:33:54
-
Здравствуйте, уважаемы создатели скрипта!
Полтора года sanitarium работал прекрасно и тут БАЦ! - престал. При попытке создать категорию или новость пишет ошибку
Error: Can\'t flock DATABASE, reason: Operation not supported at /usr/home/10134/asiatimes.ru/html/news2/admin/admin.cgi line 191
Переустановил скрипт, настроил как надо и всё равно пишет это.
Как быть? Очень жду ответа
-
1. а если чистый санитар поставить работает?
проверьте, будет ли все ОК,
2 если в cfg.cfg выключить блокировку файла
cfg.cfg:
$use_flock=0;
проверять желательно там, где нет реальной информации.
если все заработает, то не стоит радоваться - с отключенной блокировкой он работать будет не долго, поэтому о результатах эксперимента желательно рассказать тут.
-
Чистый санитар с теми же настройками ставил, но без изменений. Странно, до этого работал без сбоев.
После отключения этой функции всё заработало. Радоваться не буду, посмотрим.
Большое спасибо!
-
Pendulum:
После отключения этой функции всё заработало. Радоваться не буду, посмотрим.
Большое спасибо!
ээ, не все так быстро.
все-таки надо работать с flock\'ом, без него у вас может накрыться база без возможности восстановления.
поэтому советую написать в тех.поддержку хостера и поинтересоваться:
почему не работает стандартная функция flock
(обновили Perl, заменили библиотеку Fcntl или еще что-то)
так как не работает такая конструкция:
open (DATA, ">file")||die("$!");
flock(DATA,2)||die("Can\'t flock DATABASE, reason: $!");
И выдает сообщение:
Can\'t flock DATABASE, reason: Operation not supported
т.е. система почему-то ругается на стандартную операцию блокировки.
-
вот что мне напели hoster.ru:
Действительно, функция flock не работает на NFS.
Место нее рекомендуется использовать Fcntl.
Дополнительную информацию можно посмотреть perldoc -f flock.
если не сложно, объясните, как это понимать :)
-
надо заменить функцию флока на эту
#!/usr/bin/perl
use File::NFSLock qw(uncache);
use Fcntl qw(LOCK_EX LOCK_NB);
my $file = "./somefile";
### set up a lock - lasts until object looses scope
if (my $lock = new File::NFSLock {
file => $file,
lock_type => LOCK_EX|LOCK_NB,
blocking_timeout => 10, # 10 sec
stale_lock_timeout => 30 * 60, # 30 min
}) {
### OR
### my $lock = File::NFSLock->new($file,LOCK_EX|LOCK_NB,10,30*60);
### do write protected stuff on $file
### at this point $file is uncached from NFS (most recent)
open(FILE, "+<$file") || die $!;
### or open it any way you like
### my $fh = IO::File->open( $file, \'w\' ) || die $!
### update (uncache across NFS) other files
uncache("someotherfile1");
uncache("someotherfile2");
# open(FILE2,"someotherfile1");
### unlock it
$lock->unlock();
### OR
### undef $lock;
### OR let $lock go out of scope
}else{
die "I couldn\'t lock the file [$File::NFSLock::errstr]";
}
подскажите, пожалуйста, где менять?