Добавить исполняемое действие к условию
#include <ha/ham.h>
ham_action_t * ham_action_execute( ham_condition_t *chdl,
const char *aname,
const char *path,
unsigned flags );
- chdl
- Дескриптор условия может быть получен из:
- одной из функций ham_condition*() для добавления условий либо:
- путём вызова любой из ham_condition_handle() функций для запроса дескриптора для конкретного условия.
- aname
- Действие HAM.
- path
- Параметр path должен содержать ПОЛНЫЙ путь path к исполняемому файлу вместе со всеми передаваемыми ему параметрами. Если либо имя пути, либо аргументы содержат пробелы, которые необходимо передать вызову spawn(), их необходимо заключить в кавычки. Когда подкомпоненты в аргументах path заключены в кавычки, используйте любой из следующих методов:
\'path with space\'
или \"path with space\",
также допустимо: "\'path with space\' arg1 arg2 \"arg3 with space\"".
Это будет рассматриваться как "path with space" -> path
arg1 = arg1
arg2 = arg2
arg3 = "arg3 with space".
- flags
- Флаги:
- HACTIONDONOW
- Сообщает HAM о немедленном однократном выполнении действия в дополнение к его выполнению всякий раз, когда срабатывает условие.
- HREARMAFTERRESTART
- Указывает, что действие должно быть автоматически перезапущено после перезапуска объекта, которому оно принадлежит. По умолчанию этот флаг отключен — действия автоматически удаляются при перезапуске объекта. Обратите внимание, что если условие, которому принадлежит это действие, удаляется после перезапуска, это действие также будет удалено, независимо от значения этого флага.
- HACTIONBREAKONFAIL
- Указывает, что если это действие завершится с ошибкой, и оно является частью списка действий, то ни одно из действий, следующих за этим в списке, не будет выполнено.
- HACTIONKEEPONFAIL
- Указывает, что действие будет сохранено даже в случае сбоя. Поведение по умолчанию — удалить неудавшиеся действия. Тем не менее, если условие, с которым связано это действие, не сохраняется, действие будет автоматически удалено.
libham
Функция ham_action_execute() добавляет действие (aname) к заданному условию. Действие исполнит внешнюю программу или команду, указываемую в path.
Командная строка, в свою очередь, передается HAM в команду spawn() для создания нового процесса, который будет выполнять команду.
Действие выполняется, когда срабатывает соответствующее условие.
Пользователи могут указать, что будет сделано, если действие не будет совершено. Такие действия добавляются в список. Для каждого несовершенного действия будет выполнен соответствующий список действий. Некоторые действия (например, ham_action_log() и ham_action_heartbeat_healthy()) гарантированно совершаются. Для получения дополнительной информации обратитесь к соответствующему разделу в Менеджер высокой готовности (HAM) для вызовов ham_action_fail_*().
- Адрес
- Дескриптор действия для условия.
- NULL
- Возникла ошибка. Код ошибки записан в errno.
- EBADF
- Не удалось подключиться к HAM.
- EINVAL
- Имя aname некорректно (например, содержит символ
/
) или имеет значение NULL
. Не удалось подключиться к HAM. Это происходит, когда процесс, открывший соединение (используя ham_connect()), и процесс, вызывающий ham_action_execute(), не совпадают. - ENAMETOOLONG
- Указанное имя (в aname) слишком длинное, т.е. оно превышает
_POSIX_PATH_MAX
(определено в <limits.h>
). Обратите внимание, что общая длина имени объекта/условия/действия также ограничена _POSIX_PATH_MAX
. - ENOENT
- Отсутствует объект или условие с заданным дескриптором (chdl).
- ENOMEM
- Недостаточно памяти для создания нового дескриптора.
В дополнение к вышеуказанным ошибкам HAM возвращает любую ошибку, с которой он сталкивается при обслуживании данного запроса.
ЗОСРВ «Нейтрино»
- Нет
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Нет
- В потоке
- Да
ham_action_notify_pulse(), ham_action_notify_signal(), ham_action_remove(), ham_action_restart(), ham_action_waitfor(), ham_condition(), ham_condition_handle()
Предыдущий раздел: Менеджер высокой готовности (HAM)