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
   #В случае ошибки нужно будет просто вернуть не пустую строку.
 }
Была ли эта информация полезной? Да | Нет
Личные инструменты