Процесс перезагрузки при смене файла в Linux
Есть ли простое решение (с использованием общих оболочек utils через утилиту, предоставляемую большинством дистрибутивов, или простой python/... script) для перезапуска процесса при изменении некоторых файлов?
Было бы неплохо просто вызвать sth как watch -cmd "./the_process -arg" deps/*
.
Update:
Простая оболочка script вместе с предлагаемыми инструментами inotify (nice!) Соответствует моим потребностям (работает для команд без аргументов):
#!/bin/sh
while true; do
[email protected] &
PID=$!
inotifywait $1
kill $PID
done
Ответы
Ответ 1
Да, вы можете смотреть каталог через систему inotify с помощью inotifywait
или inotifywatch
из inotify-tools.
inotifywait
выйдет при обнаружении события. Пропустите опцию -r
, чтобы смотреть каталоги рекурсивно. Пример: inotifywait -r mydirectory
.
Вы также можете указать событие для просмотра вместо просмотра всех событий. Для ожидания только изменений содержимого файла или каталога используйте опцию -e modify
.
Ответ 2
Это улучшение ответа, поставленного в вопросе. Когда один прерывает script, процесс запуска должен быть убит.
#!/bin/sh
sigint_handler()
{
kill $PID
exit
}
trap sigint_handler SIGINT
while true; do
[email protected] &
PID=$!
inotifywait -e modify -e move -e create -e delete -e attrib -r `pwd`
kill $PID
done
Ответ 3
Отъезд iWatch
:
Watch - это программа мониторинга файловой системы в реальном времени. Это инструмент для обнаружения изменений в файловой системе и немедленного сообщения об этом. Он использует простой файл конфигурации в формате XML и основан на inotify, системе уведомлений об изменении файла в ядре Linux.
чем, вы могли бы легко просматривать файлы:
iwatch /path/to/file -c 'run_you_script.sh'
Ответ 4
Я считаю, что это вполне соответствует полному сценарию, запрашиваемому ПО:
ls *.py | entr -r python my_main.py
Смотрите также http://eradman.com/entrproject/, хотя и немного странно задокументировано. Да, вы должны ls
шаблон файла, который вы хотите соответствовать, и трубы, что в entr
исполняемый файл. Он запустит вашу программу и перезапустит ее, когда изменится любой из найденных файлов.