LongTask
Материал из ISPWiki
Начиная с релиза BILLmanager 4.0.49 механизм LongTask обновлен. Старая версия статьи находится здесь.
Основные изменения:
- Параметры передаются через командную строку. Однако для обратной совместимость передача параметров через третий файловый дескриптор сохранена;
- Механизм больше не выполняет рестарт в случае краха программы;
- Добавлена форма отслеживания состояния заданий LongTask (модуль Фоновые задания);
- Добавлен механизм очередей.
Механизм LongTask (фоновое задание) предназначен для того, чтобы работать с процессами выполняющимися долгое время. При инициализации нового задания BILLmanager выполняет следующие действия:
- создается PID-файл. Местоположением файла является: для задания, которое необходимо поместить в очередь - /usr/local/ispmgr/var/run/billmgr/имя_очереди. Для обычного задания - /usr/local/ispmgr/var/run/billmgr. В PID-файле в первой строке указан текущий статус задания, в остальных - параметры запуска. Возможные статусы:
- RUN - задание запущено;
- QUE - задание находится в ожидании своей очереди;
- OK - задание успешно завершено;
- ERR - задание завершилось с ошибкой.
- запускается дочерний процесс (фоновое задание), которому передаются параметры запуска как опции командной строки. Кроме того выставляются необходимые переменные окружения и выполняется блокирование (locking) PID-файла.
- система переходит в режим ожидания ответа от дочернего процесса, при этом периодически отслеживая его статус. В случае аварийного завершения дочернего процесса система подменить содержимое PID-файла на "ERR crashed".
Каждый LongTask в конце своей работы обязан известить BILLmanager о своем статусе, для этого необходимо вызвать одну из функции BILLmanager:
- в случае успешного завершения
/usr/local/ispmgr/sbin/mgrctl -m имя_запускающего_менеджера longtask.finish elid=путь_до_pid-файла status=ok
- в случае ошибки
/usr/local/ispmgr/sbin/mgrctl -m имя_запускающего_менеджера longtask.finish elid=путь_до_pid-файла status=err errmsg=текст_ошибки
где:
- имя_запускающего_менеджера - в случае BILLmanager - billmgr
- путь_до_pid-файла - путь до pid-файла LongTask - получить значение можно из переменной окружение MGR_LT_PID
