forked from diegosouzapw/OmniRoute
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrestart.sh
More file actions
executable file
·119 lines (99 loc) · 2.95 KB
/
restart.sh
File metadata and controls
executable file
·119 lines (99 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/bash
PORT=20128
MAX_ATTEMPTS=3
echo "🔄 Reiniciando aplicação na porta $PORT..."
# Função para matar processos pela porta
kill_by_port() {
local attempt=1
while [ $attempt -le $MAX_ATTEMPTS ]; do
echo "Tentativa $attempt de $MAX_ATTEMPTS..."
# Tenta encontrar processos usando lsof
PIDS=$(lsof -ti:$PORT 2>/dev/null)
if [ -z "$PIDS" ]; then
echo "✓ Porta $PORT está livre"
return 0
fi
echo "🔴 Matando processos na porta $PORT: $PIDS"
# Tenta SIGTERM primeiro (mais gentil)
if [ $attempt -eq 1 ]; then
for PID in $PIDS; do
kill $PID 2>/dev/null && echo " - SIGTERM enviado para PID $PID"
done
sleep 2
else
# Se não funcionou, usa SIGKILL (força)
for PID in $PIDS; do
kill -9 $PID 2>/dev/null && echo " - SIGKILL enviado para PID $PID"
done
sleep 1
fi
# Fallback: tenta fuser se lsof não funcionou
if command -v fuser >/dev/null 2>&1; then
fuser -k -9 $PORT/tcp 2>/dev/null && echo " - fuser utilizado como fallback"
sleep 1
fi
attempt=$((attempt + 1))
done
# Última verificação
if lsof -ti:$PORT >/dev/null 2>&1; then
echo "❌ Erro: Não foi possível liberar a porta $PORT após $MAX_ATTEMPTS tentativas"
echo "Processos ainda ativos:"
lsof -i:$PORT 2>/dev/null
return 1
fi
return 0
}
# Executa a função de kill
if ! kill_by_port; then
echo ""
echo "💡 Sugestão: Execute manualmente:"
echo " sudo lsof -ti:$PORT | xargs kill -9"
exit 1
fi
echo ""
echo "🧹 Limpando build anterior (.next)..."
rm -rf .next
echo "🔨 Fazendo build limpo..."
npm run build
if [ $? -ne 0 ]; then
echo "❌ Build falhou!"
exit 1
fi
echo ""
# Garante que a porta está livre antes de iniciar (build pode ter ocupado)
fuser -k $PORT/tcp 2>/dev/null
sleep 1
echo "🚀 Iniciando servidor na porta $PORT..."
LOG_FILE="/tmp/omniroute.log"
> "$LOG_FILE"
npx next start --port $PORT >> "$LOG_FILE" 2>&1 &
SERVER_PID=$!
# Ao fechar (Ctrl+C), mata o servidor e libera a porta
cleanup() {
echo ""
echo "🛑 Parando servidor (PID: $SERVER_PID)..."
kill $SERVER_PID 2>/dev/null
wait $SERVER_PID 2>/dev/null
fuser -k $PORT/tcp 2>/dev/null
echo "✅ Servidor parado. Porta $PORT liberada."
exit 0
}
trap cleanup SIGINT SIGTERM
# Aguarda o servidor ficar pronto
echo "⏳ Aguardando servidor iniciar (PID: $SERVER_PID)..."
for i in $(seq 1 15); do
sleep 1
if curl -s -o /dev/null -w "" http://localhost:$PORT > /dev/null 2>&1; then
echo ""
echo "✅ Servidor rodando em http://localhost:$PORT (PID: $SERVER_PID)"
echo "📄 Pressione Ctrl+C para parar"
echo "────────────────────────────────────────"
break
fi
printf "."
done
# Fica mostrando os logs na tela até Ctrl+C
tail -f "$LOG_FILE" &
TAIL_PID=$!
wait $SERVER_PID 2>/dev/null
kill $TAIL_PID 2>/dev/null