Это можно сделать с помощью инструмента с открытым исходным кодом monit
!
Давайте добавим следующее в /etc/monit.conf
:
check file test with path /path/tp/test
if changed checksum then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id
Мы должны убедиться, что пользователь с a_user_id
as id
имеет достаточные привилегии to / path / to / test
file и
чтение, выполнение привилегий для /path/to/script.sh
Когда мы меняем monit. conf
затем как root:
monit reload
для получения изменений в демон monit
watch monit status
может отображать изменения в отчете monit
при запуске события
Например, в этом примере
при изменении содержимого файла / path / to / test
будет запущен сценарий /path/to/script.sh
По умолчанию monit
просыпается каждые 30 секунд и выполняет настроенные проверки.
Чтобы проверить добавление нового файла в каталог или изменение файла в каталоге:
check directory test2 with path /path/to<br/>
if changed timestamp then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id
Я считаю, что эту конфигурацию можно легко обновить чтобы соответствовать потребностям вашего приложения!
Проблемы такого рода возникают, когда что-то выводит данные на стандартный вывод, когда этого делать не следует, и, таким образом, обычно искажает либо приглашение Zsh Line Editor, либо вывод команды. Ошибочная печать, вероятно, выполняется из-за функции ловушки, которую редактор строк запускает при выполнении пользовательской команды. Возможно, вы сможете найти оскорбительный вызов print/echo, выполнив поиск в телах функций-ловушек:
whence -f precmd $precmd_functions preexec $preexec_functions
Это функции-ловушки, задокументированные в http://zsh.sourceforge.net/Doc/Release/Functions.html# Хуки-функции.
Как упоминалось в предыдущих комментариях, некорректный вызов print/echo, вероятно, является неудачной попыткой связаться с терминалом, а не вывести его на стандартный вывод. Обычно я бы "если бы исключил" оскорбительную строку кода примерно так:
if [[ $TERM != guake ]]; then
print -n "\E]..."
fi
, но кажется, что Гуаке неправильно устанавливает ТЕРМИН. Надеюсь, вы сможете найти другой способ определить, какой терминал работает. Или, возможно, просто очистите/измените эти функции и массивы функций в вашем .zshrc.