Подтвердить что ты не робот

Процесс перезагрузки при смене файла в 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
4b9b3361

Ответ 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 исполняемый файл. Он запустит вашу программу и перезапустит ее, когда изменится любой из найденных файлов.