-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstart.sh
More file actions
146 lines (123 loc) · 4.65 KB
/
start.sh
File metadata and controls
146 lines (123 loc) · 4.65 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/bin/bash
# =============================================================================
# start.sh — IACT-db: arranca MariaDB y PostgreSQL si no están corriendo
# =============================================================================
# Uso:
# bash start.sh # arranca ambas BDs
# bash start.sh mariadb # solo MariaDB
# bash start.sh postgres # solo PostgreSQL
#
# Flujo de arranque MariaDB:
# 1. Ya está corriendo → nada
# 2. Limpia PID/socket stale
# 3. Intenta via service/systemctl
# 4. Arranca mariadbd directamente (sin systemd)
# 5. Espera hasta 30s
#
# Flujo de arranque PostgreSQL:
# 1. Ya está corriendo → nada
# 2. Limpia PID stale (pg_ctlcluster lo hace solo)
# 3. Intenta pg_ctlcluster → service/systemctl
# 4. Espera hasta 30s
#
# No requiere root si los servicios ya están instalados y configurados.
# =============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$SCRIPT_DIR"
source "${PROJECT_ROOT}/utils/logging.sh"
source "${PROJECT_ROOT}/utils/core.sh"
source "${PROJECT_ROOT}/utils/network.sh"
source "${PROJECT_ROOT}/utils/database.sh"
# Cargar .env si existe (para leer versiones)
ENV_FILE="${PROJECT_ROOT}/.env"
[[ -f "$ENV_FILE" ]] && { set -a; source "$ENV_FILE"; set +a; }
POSTGRES_VERSION="${POSTGRES_VERSION:-16}"
TARGET="${1:-all}" # all | mariadb | postgres
# =============================================================================
start_mariadb() {
log_header "MariaDB"
if mariadb_is_running; then
log_success "MariaDB ya está corriendo"
return 0
fi
log_info "MariaDB inactivo — iniciando..."
mariadb_cleanup_stale
# Intentar via service/systemctl
local started=false
if command -v service &>/dev/null; then
service mariadb start 2>/dev/null && started=true && \
log_info "Iniciado via service" || true
fi
if ! $started && command -v systemctl &>/dev/null; then
systemctl start mariadb 2>/dev/null && started=true && \
log_info "Iniciado via systemctl" || true
fi
# Arranque directo con mariadbd (sin init system)
if ! $started; then
local daemon
if command -v mariadbd &>/dev/null; then daemon="mariadbd"
elif command -v mysqld &>/dev/null; then daemon="mysqld"
else log_error "No se encontró mariadbd ni mysqld"; return 1; fi
log_info "Arrancando $daemon directamente..."
mkdir -p /run/mysqld
chown mysql:mysql /run/mysqld 2>/dev/null || true
nohup su -s /bin/bash mysql -c \
"$daemon \
--datadir=/var/lib/mysql \
--socket=/run/mysqld/mysqld.sock \
--pid-file=/run/mysqld/mysqld.pid \
--log-error=/var/log/mysql/error.log \
--bind-address=127.0.0.1 \
--port=3306" \
>/tmp/mariadbd_start.log 2>&1 &
fi
mariadb_wait_ready 30 && log_success "MariaDB activo" || {
log_error "MariaDB no respondió en 30s"
log_error "Log: $(tail -5 /tmp/mariadbd_start.log 2>/dev/null || echo 'no disponible')"
return 1
}
}
# =============================================================================
start_postgres() {
log_header "PostgreSQL"
if pg_is_running; then
log_success "PostgreSQL ya está corriendo"
return 0
fi
log_info "PostgreSQL inactivo — iniciando..."
# pg_ctlcluster (más fiable en Ubuntu/Debian)
if command -v pg_ctlcluster &>/dev/null; then
pg_ctlcluster "$POSTGRES_VERSION" main start 2>/dev/null && \
log_info "Iniciado via pg_ctlcluster ${POSTGRES_VERSION}" || true
fi
if ! pg_is_running && command -v service &>/dev/null; then
service postgresql start 2>/dev/null && \
log_info "Iniciado via service" || true
fi
if ! pg_is_running && command -v systemctl &>/dev/null; then
systemctl start postgresql 2>/dev/null && \
log_info "Iniciado via systemctl" || true
fi
postgres_wait_ready 30 && log_success "PostgreSQL activo" || {
log_error "PostgreSQL no respondió en 30s"
return 1
}
}
# =============================================================================
log_header "IACT-db — Arranque de bases de datos"
case "$TARGET" in
mariadb) start_mariadb ;;
postgres) start_postgres ;;
all)
start_mariadb
echo ""
start_postgres
;;
*)
log_error "Uso: bash start.sh [all|mariadb|postgres]"
exit 1
;;
esac
echo ""
log_success "Listo. Ejecuta: bash verify.sh para confirmar el estado."