diff --git a/.gitignore b/.gitignore index a9a7e52..e2d4c0f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,2 @@ config.json -restart.sh -eye.sh hikan.ru \ No newline at end of file diff --git a/eye.sh b/eye.sh new file mode 100755 index 0000000..d2db1e4 --- /dev/null +++ b/eye.sh @@ -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 \ No newline at end of file diff --git a/posts/test2.md b/posts/test2.md deleted file mode 100644 index c8c491e..0000000 --- a/posts/test2.md +++ /dev/null @@ -1,3 +0,0 @@ -# TEST 2 - -123 \ No newline at end of file