Запускайте .sh каждый раз, когда файл изменяется

Я работаю с системой, которая использует сервер Ubuntu в качестве базы, но мы работаем в Windows. Виртуальные машины используют команду Mount для доступа к файлам в Windows.

Каждый раз, когда кто-то сохраняет файл, ему нужно попасть на сервер и снова запустить команду, чтобы отключить и снова запустить сервер ERP.

Поскольку мы не сильно меняем файлы (команда из двух или трех человек работает над несколькими файлами), есть ли способ запустить скрипт при каждом изменении файла?

Рабочий процесс: программист сохраняет файл >> Файл обновления Windows в папке ERP >> Экземпляр Linux, которому подключена папка Windows, получает обновление >> Linux запускает .sh, который перезапускает сервер.

2
задан 8 May 2013 в 01:16

3 ответа

Вы можете использовать инструмент entr , например

$ ls -d * | entr sh -c 'make && make test'
0
ответ дан 8 May 2013 в 01:16

Я думаю, что лучше всего использовать inotifywait из пакета «inotify-tools».

Примеры см. Лучший ответ в https://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes

0
ответ дан 8 May 2013 в 01:16

У меня была такая же проблема, как и у вас. Я разрабатываю программу на торнадо, и мне нужно перезапускать сервер при каждом коммите, поэтому я просто написал программу на bash, которая закрывает все процессы Python и запускает ее снова

#!/bin/bash
function init {
    LIST=`pgrep python`
    IFS=' ' read -a arr <<< "${LIST}"
    for pid in "${arr[@]}"
    do
        echo $pid
        `kill -9 $pid`
    done
}
init
IN=`python server.py`&

CONTENT=`cat server.py`
while :
do
    sleep 1
    CURR=`cat server.py`
    if [ "$CONTENT" != "$CURR" ]; 
        then 
            init
            IN=`python server.py`&
            CONTENT=`cat server.py`

            echo "Restarted."
        fi;
done

Скрипт запускается как демон, когда файл изменен, он просто перезапускает сервер.

Возможно, это не лучшее решение, но оно работает.

0
ответ дан 8 May 2013 в 01:16

Другие вопросы по тегам:

Похожие вопросы: