70 lines
1.8 KiB
Bash
Executable File
70 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 운영 로그 보기 — 실행하면 실행중인 컨테이너 번호 메뉴, 0=전체
|
|
# ./logs.sh → 메뉴에서 선택
|
|
# ./logs.sh 3 → 메뉴 안 띄우고 3번 바로
|
|
# ./logs.sh lps-api → 이름으로 바로
|
|
set -e
|
|
|
|
TAIL=100
|
|
|
|
# 우리 프로젝트 컨테이너만 (negosium-db는 compose 라벨이 없어 이름으로 포함)
|
|
containers=()
|
|
while IFS= read -r name; do
|
|
containers+=("$name")
|
|
done < <(
|
|
{
|
|
docker ps --filter label=com.docker.compose.project=o2o-negosium --format '{{.Names}}'
|
|
docker ps --filter name='^negosium-db$' --format '{{.Names}}'
|
|
} | sort -u
|
|
)
|
|
|
|
if [ ${#containers[@]} -eq 0 ]; then
|
|
echo "실행 중인 컨테이너가 없습니다."
|
|
exit 1
|
|
fi
|
|
|
|
follow_all() {
|
|
# docker logs -f 는 컨테이너 하나씩만 되므로 백그라운드로 전부 띄우고 prefix 붙임
|
|
trap 'kill $(jobs -p) 2>/dev/null; exit 0' INT TERM
|
|
local colors=(31 32 33 34 35 36 91 92 93 94 95 96)
|
|
local i=0
|
|
for c in "${containers[@]}"; do
|
|
local col=${colors[$((i % ${#colors[@]}))]}
|
|
docker logs -f --tail "$TAIL" "$c" 2>&1 | sed -u "s/^/$(printf '\033[%sm[%s]\033[0m ' "$col" "$c")/" &
|
|
i=$((i + 1))
|
|
done
|
|
wait
|
|
}
|
|
|
|
follow_one() {
|
|
echo "=== $1 (tail $TAIL, Ctrl+C 종료) ==="
|
|
exec docker logs -f --tail "$TAIL" "$1"
|
|
}
|
|
|
|
pick="$1"
|
|
|
|
if [ -z "$pick" ]; then
|
|
echo " 0) 전체 (모든 컨테이너)"
|
|
for idx in "${!containers[@]}"; do
|
|
printf "%2d) %s\n" "$((idx + 1))" "${containers[$idx]}"
|
|
done
|
|
printf "번호 선택: "
|
|
read -r pick
|
|
if [ -z "$pick" ]; then
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
if [ "$pick" = "0" ]; then
|
|
follow_all
|
|
elif [[ "$pick" =~ ^[0-9]+$ ]]; then
|
|
sel=$((pick - 1))
|
|
if [ "$sel" -lt 0 ] || [ "$sel" -ge ${#containers[@]} ]; then
|
|
echo "잘못된 번호: $pick"
|
|
exit 1
|
|
fi
|
|
follow_one "${containers[$sel]}"
|
|
else
|
|
follow_one "$pick"
|
|
fi
|