popushd(1) FreeBSD General Commands Manual popushd(1) NAME popushd -- Следит за файлами и при событиях с ними запускает реакции SYNOPSIS popushd [-dqvvv...] [-. envname1] [-@ envname2] [-f conffile] [-p pidfile] DESCRIPTION popushd следит с помощью kqueue(2) за файлами, заданными в конфиге, и при возникновении заданных в конфиге событий выполняет заданные в конфиге действия. Флаги демона: -. envname1 присваивает переменной окружения envname1 значение pwd. -@ envname2 присваивает переменной окружения envname2 значение pid. -d запрещает демонизацию, предназначен для отладки. -f conffile задает имя конфигурационного файла, по умолчанию это /usr/local/etc/popushd.rc. -p pidfile задает имя файла для записи туда своего PIDа, по умолчанию это /var/run/popushd.pid. -q сбрасывает уровень болтливости до 0. -v повышает этот уровень на 1. По умолчанию уровнь болтливасти 1, что обозначает выдачу сообщения по ошибке, которая приво- дит к прекращению исполнения или приводит к невыполнению заказанных в конфиге действиях. Конфигурационный файл состоит из произвольного множества кластеров. Каж- дый кластер состоит из списка объектов и списка реакций. Кластеры отделя- ются друг от друга пустыми строками. Каждый объект из списка объектов и каждая реакция из списка реакций занимают ровно одну строку в понимании babolo_getparm(3). В разных кластерах могут быть совпадающие объекты или реакции. При возникновении события popushd ищет все объекты, которые соответствуют событию и запускает реакции из кластеров, в которых найдены соответствую- щие событию объекты. Запись каждого объекта начинается обязательно с первой позиции строки. Объект может файлом или спецобъектом. Строка, описывающая ожидаемые собы- тия с файлом состоит из абсолютного пути к файлу и списка событий, разде- лены они произвольным количеством пробелов или табуляций. Существуют сле- дующие события к файлу: DELETE удаление файла WRITE запись в файл EXTEND увеличение размера файла ATTRIB изменение инода LINK изменение счетчика ссылок на файл RENAME переименование REVOKE исполнение функции revoke() подробности в kqueue(2). Спецобект состоит из одного слова: START срабатывает при старте демона STOP срабатывает при останове демона, если вызвавшая останов причина может быть перехвачена. SIGNAL срабатывает при подаче kill -HUP SELF срабатывает при изменении собственного файла конфигурации Реакция - это список слов, первое из которых есть абсолютный путь к исполняемому файлу, остальные слова - параметры ему. В первой позиции строки может стоять символ `&' или эта позиция должна быть пустой. Слова отделяются друг от друга произвольным количеством пробелов и табуляций. Перед разбором конфигурационного файла в нем производится замена всех переменных окружения на их значения. Переменные окружения выделены сим- волами `${}'. В конфигурационном файле символ `#' обозначает комментарий до конца строки, за исключением тех символов, которые экранированы от такой интер- претации, подробности разбиения, экранирования, подстановок описаны в babolo-parser(3). IMPLEMENTATION NOTES Если возникло несколько событий одновременно, popushd сначала получает все события, и когда все возникшие события получены, то запускаются на выполнение реакции из кластеров, притом каждый кластер запускается ровно один раз на группу событий, сколько бы событий на этот кластер ни пришло. Все кластеры запускаются одновременно и независимо. Реакции внутри кла- стера запускаются по одной, если первая позиция строки реакции пуста, то перед запуском следующей реакции ожидается окончание предыдущей. Если же реакция помечена символом `&' в первой позиции, то ожидания завершения не происходит. При запуске событий от спецобъектов перед выполнением реакций согласно конфигурации выполняются следующие действия: START Заново создается PID файл. Заново открывается и перечитывается файл конфигурации. SIGNAL Заново создается PID файл. Заново открывается и перечитывается файл конфигурации. SELF Заново открывается и перечитывается файл конфигурации. При запуске событий от спецобъектов после выполнения реакций согласно конфигурации выполняются следующие действия: STOP Удаляется PID файл. Прекращается выполнение демона. ENVIRONMENT Все переменные окружения используются для подстановки в конфигурационном файле и передаются реакциям. В дополнение к переменным, полученным из своего окружения, демон может установить произвольное количество перемен- ных значением своего текущего каталога в момент запуска флагами -.. FILES /usr/local/etc/popushd.rc конфигурационный файл, если не переопределен при запуске /var/run/popushd.pid PID файл, если не переопределен при запуске. EXAMPLES # test START /bin/sh -c 'echo start' & /bin/sleep 5 /bin/ls SELF SIGNAL STOP /bin/sh -c 'echo SSS' /etc/rc.local DELETE /bin/sh -c ' echo " ee! " ' ${WDPATH}/test/file DELETE WRITE EXTEND LINK RENAME /bin/echo HOHO ${WDPATH}/test/file REVOKE ATTRIB /bin/echo REVOKE DIAGNOSTICS При запуске с неправильными параметрами демон выдает краткую подсказку и завершается. При запуске с правильными параметрами командной строки демон просто так не завершается. Если не установлен нулевой уровень болтливости, демон сообщает о всех существенных ошибках либо в syslog, если демонизирован, либо в stderr иначе. Независимо от уровня болтливо- сти демон всегда сообщает в syslog или stderr о прекращении выполнения и, возможно, о причинах прекращения выполнения. SEE ALSO kqueue(2), fork(2), vfork(2), execve(2), babolo_getparm(3). AUTHORS Aleksandr A. Babaylov (aka @BABOLO) .@babolo.ru http://www.babolo.ru/ BUGS Неоконченный кластер блокирует прием событий. Нет возможности подождать окончания асинхронных реакций. Нет контроля за overforkingом, некоторые реакции могут потеряться из-за нехватки ресурсов. Если какой либо файл из наблюдаемых переименован или удален, то для пре- кращения наблюдения за удаленным файлом или переключения наблюдения за переименованным файлом на новый с тем же названием надо запустить рекон- фиг демона. Этот реконфиг может быть одной из реакций кластера, но осто- рожно - можно зациклить. 25 July 2007