Я работаю с системой, которая использует сервер Ubuntu в качестве базы, но мы работаем в Windows. Виртуальные машины используют команду Mount для доступа к файлам в Windows.
Каждый раз, когда кто-то сохраняет файл, ему нужно попасть на сервер и снова запустить команду, чтобы отключить и снова запустить сервер ERP.
Поскольку мы не сильно меняем файлы (команда из двух или трех человек работает над несколькими файлами), есть ли способ запустить скрипт при каждом изменении файла?
Рабочий процесс: программист сохраняет файл >> Файл обновления Windows в папке ERP >> Экземпляр Linux, которому подключена папка Windows, получает обновление >> Linux запускает .sh, который перезапускает сервер.
Вы можете использовать инструмент entr
, например
$ ls -d * | entr sh -c 'make && make test'
Я думаю, что лучше всего использовать inotifywait из пакета «inotify-tools».
Примеры см. Лучший ответ в https://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes
У меня была такая же проблема, как и у вас. Я разрабатываю программу на торнадо, и мне нужно перезапускать сервер при каждом коммите, поэтому я просто написал программу на 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
Скрипт запускается как демон, когда файл изменен, он просто перезапускает сервер.
Возможно, это не лучшее решение, но оно работает.