eye.sh
parent
3c301dbefc
commit
1f0c0d22c8
|
@ -1,4 +1,2 @@
|
|||
config.json
|
||||
restart.sh
|
||||
eye.sh
|
||||
hikan.ru
|
|
@ -0,0 +1,98 @@
|
|||
#!/bin/bash
|
||||
stty -echoctl # Отключает вывод управляющих символов по типу ^C
|
||||
|
||||
# НАСТРОЙКА СКРИПТА ТУТ ###########################################################
|
||||
DURATION=1 # Задержка между проверками в секундах
|
||||
WATCH_DIRS=("posts" "mvc" "assets") # Массив директорий для наблюдения
|
||||
BINARY_PATH="./main" # Путь до бинарного файла
|
||||
BUILD_CMD="go build -o $BINARY_PATH main.go" # Команда для сборки
|
||||
###################################################################################
|
||||
|
||||
# Массивы для хранения информации о директориях
|
||||
declare -A LAST_MODS
|
||||
declare -A LAST_COUNTS
|
||||
CLEANUP_DONE=0
|
||||
#
|
||||
|
||||
# Вывод в синем цвете
|
||||
blue() {
|
||||
echo -e "\033[34m$1\033[0m"
|
||||
}
|
||||
|
||||
# Очистка при завершении работы скрипта
|
||||
cleanup() {
|
||||
[ $CLEANUP_DONE -eq 1 ] && exit 0
|
||||
blue "EYE | cleanup..."
|
||||
kill_proc $1
|
||||
rm -f $BINARY_PATH
|
||||
blue "EYE | see you later!"
|
||||
CLEANUP_DONE=1
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Убийство процесса по его pid
|
||||
kill_proc() {
|
||||
local pid=$1
|
||||
if [ -n "$pid" ] && kill -0 $pid 2>/dev/null; then
|
||||
kill $pid
|
||||
blue "EYE | process killed (PID: $pid)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Проверка изменений в директориях
|
||||
check_changes() {
|
||||
local changed=0
|
||||
|
||||
for dir in "${WATCH_DIRS[@]}"; do
|
||||
local current_mod=$(find "$dir" -type f -exec stat -c %Y {} \; | sort -nr | head -1)
|
||||
local current_count=$(find "$dir" -type f 2>/dev/null | wc -l)
|
||||
|
||||
if { [ -n "$current_mod" ] && [ "$current_mod" -gt "${LAST_MODS[$dir]}" ]; } || [ "$current_count" -ne "${LAST_COUNTS[$dir]}" ]; then
|
||||
changed=1
|
||||
LAST_MODS["$dir"]=$current_mod
|
||||
LAST_COUNTS["$dir"]=$current_count
|
||||
[ -n "$1" ] && blue "EYE | changes detected in \033[94m$dir\033[0m"
|
||||
fi
|
||||
done
|
||||
|
||||
return $changed
|
||||
}
|
||||
|
||||
# Основная функция
|
||||
main() {
|
||||
local pid=""
|
||||
|
||||
# Ловушка для сигналов завершения
|
||||
trap 'cleanup $pid' SIGINT SIGTERM SIGHUP SIGQUIT EXIT
|
||||
#
|
||||
|
||||
# Инициализация массивов
|
||||
for dir in "${WATCH_DIRS[@]}"; do
|
||||
LAST_MODS["$dir"]=0
|
||||
LAST_COUNTS["$dir"]=$(find "$dir" -type f 2>/dev/null | wc -l)
|
||||
blue "EYE | started watching the directory \033[94m$dir\033[0m"
|
||||
done
|
||||
#
|
||||
|
||||
# Основной цикл работы скрипта
|
||||
while true; do
|
||||
check_changes $pid
|
||||
if [ $? -eq 1 ]; then
|
||||
blue "EYE | rebuilding..."
|
||||
$BUILD_CMD
|
||||
if [ $? -eq 0 ]; then
|
||||
blue "EYE | build successful. restarting..."
|
||||
kill_proc $pid
|
||||
$BINARY_PATH &
|
||||
pid=$!
|
||||
blue "EYE | started new process (PID: $pid)"
|
||||
else
|
||||
blue "EYE | build failed"
|
||||
fi
|
||||
fi
|
||||
|
||||
sleep $DURATION
|
||||
done
|
||||
}
|
||||
|
||||
main
|
|
@ -1,3 +0,0 @@
|
|||
# TEST 2
|
||||
|
||||
123
|
Loading…
Reference in New Issue