LongTask old
Материал из ISPWiki
ВНИМАНИЕ! Начиная с релиза BILLmanager 4.0.49 механизм LongTask обновлен. Новый вариант статьи можно найти здесь.
Механизм LongTask предназначен для того, чтобы работать с процессами выполняющимися долгое время. Главный процесс запускает дочерний, при этом, оставляет открытым третий файловый дескриптор, через который происходит передача параметров и родительский процесс узнает о результате. При этом каждые несколько минут идет проверка файлов в директории /usr/local/ispmgr/var/run, и если есть не заблокированный файл с RUN в первой строчке, то LongTask перезапускается. Параметры передаются в файле, в следующем виде:
RUN param1 param2 ... paramN
В случае успешного выполнения необходимо стереть содержимое файла и записать в него:
OK!\n
В случае ошибки, так же стереть, но записать:
ERR сообщение_об_ошибке\n
Перед завершением следует вызвать
/usr/local/ispmgr/sbin/mgrctl -m имя_запускающего_менеджера longtask
В случае BILLmanager - это billmgr.
Небольшой пример на perl по работе с LongTask
#!/usr/bin/perl
open(DEBUG, ">>/tmp/debug.log");
open (FD3, '<&3');
my @ltparams;
my $count = 0;
while (<FD3>) {
chomp;
$ltparams[$count] = $_;
$count = $count + 1;
}
if ($count){
print DEBUG "longtask";
my $res = longtask();
open (FD3, '>&3');
seek(FD3, 0, 0);
truncate(FD3, 0);
if($res){
print FD3 "ERR $res\n";
} else {
print FD3 "OK!\n";
}
system "/usr/local/ispmgr/sbin/mgrctl -m billmgr longtask";
} else {
#значит не LongTask, можно работать в обычном режиме.
}
close(DEBUG);
sub longtask(){
#здесь можно читать параметры из массива @ltparams
#В случае ошибки нужно будет просто вернуть не пустую строку.
}
