Commit 7f409da2 authored by platyhouse's avatar platyhouse

# Tmux 세션 관리 도구 추가

## 세션 실행 관리

### 세션 접속 및 생성
- **ptyTmux**: 지정한 세션명으로 tmux 세션 생성 또는 재접속
  - 인자 없이 실행 시 현재 실행 중인 세션 목록 표시
  - 세션이 없으면 새로 생성, 있으면 재접속

### 작업 완료 알림
- **ptyRunWithAlert**: 명령 실행 후 사운드 알림 도구
  - 현재 시스템 볼륨 백업 후 임시로 70으로 설정
  - Sosumi 사운드 2회 반복 재생
  - 완료 후 원래 볼륨으로 복구

## 세션 삭제 관리

### 패턴 기반 세션 삭제
- **ptyTmuxKill**: 패턴 매칭으로 tmux 세션 삭제
  - 와일드카드 패턴 지원 (*, abcd*, *xyz, *word*)
  - monitor_dashboard 세션 자동 보호 (삭제 대상 제외)
  - 삭제 전 세션 목록 표시 및 확인 프롬프트
  - 삭제 결과 통계 (성공/실패 개수)

## 세션 모니터링 관리

### 다중 세션 실시간 모니터링
- **ptyTmuxMonitoring**: 여러 tmux 세션을 하나의 대시보드에서 모니터링
  - 패턴 매칭으로 모니터링 대상 선택
  - monitor_dashboard 세션에 타일 레이아웃으로 pane 분할
  - 각 pane에서 watch로 1초마다 세션 출력 갱신 (최근 30줄)
  - tiled 레이아웃으로 화면 균등 분할
parent 246e711d
#!/bin/bash
# 현재 볼륨 저장
CURRENT_VOLUME=$(osascript -e "output volume of (get volume settings)")
# 볼륨 최대로 (100)
osascript -e "set volume output volume 70"
# 가장 강력한 사이렌 소리 (Sosumi 5번 반복)
for i in {1..2}; do
afplay /System/Library/Sounds/Sosumi.aiff &
sleep 0.15
done
# 추가로 긴 경고음
# afplay /System/Library/Sounds/Submarine.aiff
# say "작업 종료"
# 볼륨 원래대로
osascript -e "set volume output volume $CURRENT_VOLUME"
# echo "🚨 알림 완료!"
#!/bin/bash
if [[ $# -eq 0 ]]; then
echo "╔════════════════════════════════════════╗"
echo "║ Tmux 세션 관리 ║"
echo "╚════════════════════════════════════════╝"
echo ""
echo "사용법: $0 <세션명>"
echo ""
echo "현재 실행 중인 세션:"
echo "─────────────────────────────────────────"
if tmux list-sessions 2>/dev/null; then
:
else
echo " (실행 중인 세션 없음)"
fi
echo ""
exit 0
fi
tmux new-session -A -s $1
#!/bin/bash
# tmux 세션 삭제 도구
show_help() {
cat << EOF
╔════════════════════════════════════════╗
║ Tmux 세션 삭제 도구 ║
╚════════════════════════════════════════╝
사용법: $0 <패턴>
패턴:
* - 모든 tmux 세션 삭제
abcd* - 'abcd'로 시작하는 세션만 삭제
*xyz - 'xyz'로 끝나는 세션만 삭제
*word* - 'word'가 포함된 세션만 삭제
session_1 - 정확한 세션명만 삭제
예제:
$0 '*' # 모든 세션 삭제
$0 'ai_*' # ai_로 시작하는 모든 세션 삭제
$0 'worker*' # worker로 시작하는 세션 삭제
$0 'my_session' # 특정 세션만 삭제
EOF
echo "현재 실행 중인 세션:"
echo "─────────────────────────────────────────"
if tmux list-sessions 2>/dev/null; then
:
else
echo " (실행 중인 세션 없음)"
fi
echo ""
exit 0
}
kill_sessions() {
local pattern="$1"
local monitor_session="monitor_dashboard"
# 패턴에 맞는 세션 찾기
local sessions=()
if [[ "$pattern" == "*" ]]; then
# 모든 세션 (monitor_dashboard 제외)
while IFS= read -r session; do
sessions+=("$session")
done < <(tmux list-sessions -F "#{session_name}" 2>/dev/null | grep -v "^${monitor_session}$")
else
# 패턴 매칭 (bash glob을 grep 패턴으로 변환)
local grep_pattern="${pattern}"
grep_pattern="${grep_pattern//\*/.*}" # * -> .*
grep_pattern="^${grep_pattern}$" # 전체 매칭
while IFS= read -r session; do
sessions+=("$session")
done < <(tmux list-sessions -F "#{session_name}" 2>/dev/null | grep -v "^${monitor_session}$" | grep -E "$grep_pattern")
fi
# 세션이 없으면 에러
if [[ ${#sessions[@]} -eq 0 ]]; then
echo "❌ 패턴 '${pattern}'에 맞는 세션이 없습니다."
echo ""
echo "현재 실행 중인 세션:"
tmux list-sessions 2>/dev/null || echo " (없음)"
exit 1
fi
# 삭제할 세션 목록 표시
echo "🗑️ 삭제할 세션 (${#sessions[@]}개):"
echo "─────────────────────────────────────────"
for session in "${sessions[@]}"; do
echo " - $session"
done
echo ""
# 확인
read -p "정말 삭제하시겠습니까? (y/N): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
echo "❌ 취소되었습니다."
exit 0
fi
# 세션 삭제
echo ""
local success_count=0
local fail_count=0
for session in "${sessions[@]}"; do
if tmux kill-session -t "$session" 2>/dev/null; then
echo "✅ $session 삭제됨"
((success_count++))
else
echo "❌ $session 삭제 실패"
((fail_count++))
fi
done
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "완료: ${success_count}개 삭제, ${fail_count}개 실패"
}
# 메인
if [[ $# -eq 0 ]]; then
show_help
fi
PATTERN="$1"
kill_sessions "$PATTERN"
#!/bin/bash
# tmux 세션 모니터링 도구
show_help() {
cat << EOF
╔════════════════════════════════════════╗
║ Tmux 세션 모니터링 도구 ║
╚════════════════════════════════════════╝
사용법: $0 <패턴>
패턴:
* - 모든 tmux 세션 모니터링
abcd* - 'abcd'로 시작하는 세션만 모니터링
*xyz - 'xyz'로 끝나는 세션만 모니터링
*word* - 'word'가 포함된 세션만 모니터링
session_1 - 정확한 세션명 모니터링
예제:
$0 '*' # 모든 세션
$0 'ai_*' # ai_로 시작하는 모든 세션
$0 'worker*' # worker로 시작하는 세션
$0 'my_session' # 특정 세션
EOF
echo "현재 실행 중인 세션:"
echo "─────────────────────────────────────────"
if tmux list-sessions 2>/dev/null | grep -v "^monitor_dashboard:"; then
:
else
echo " (실행 중인 세션 없음)"
fi
echo ""
exit 0
}
monitor_dashboard() {
local pattern="$1"
local monitor_session="monitor_dashboard"
# 패턴에 맞는 세션 찾기
local sessions=()
if [[ "$pattern" == "*" ]]; then
# 모든 세션
while IFS= read -r session; do
sessions+=("$session")
done < <(tmux list-sessions -F "#{session_name}" 2>/dev/null | grep -v "^${monitor_session}$")
else
# 패턴 매칭 (bash glob을 grep 패턴으로 변환)
local grep_pattern="${pattern}"
grep_pattern="${grep_pattern//\*/.*}" # * -> .*
grep_pattern="^${grep_pattern}$" # 전체 매칭
while IFS= read -r session; do
sessions+=("$session")
done < <(tmux list-sessions -F "#{session_name}" 2>/dev/null | grep -v "^${monitor_session}$" | grep -E "$grep_pattern")
fi
# 세션이 없으면 에러
if [[ ${#sessions[@]} -eq 0 ]]; then
echo "❌ 패턴 '${pattern}'에 맞는 세션이 없습니다."
echo ""
echo "현재 실행 중인 세션:"
tmux list-sessions 2>/dev/null || echo " (없음)"
exit 1
fi
# 기존 모니터 세션 제거
tmux kill-session -t "$monitor_session" 2>/dev/null
echo "📺 모니터링 세션: ${sessions[*]}"
echo "✅ 대시보드 생성 중..."
# 새 세션 생성
tmux new-session -d -s "$monitor_session"
# 첫 번째 pane
tmux send-keys -t "$monitor_session" \
"watch -n 1 --color 'tmux capture-pane -t ${sessions[0]} -e -p | tail -30'" C-m
# 나머지 pane들 추가
for ((i=1; i<${#sessions[@]}; i++)); do
tmux split-window -t "$monitor_session" -v
tmux select-layout -t "$monitor_session" tiled
tmux send-keys -t "$monitor_session" \
"watch -n 1 --color 'tmux capture-pane -t ${sessions[$i]} -e -p | tail -30'" C-m
done
tmux select-layout -t "$monitor_session" tiled
echo "✅ 대시보드 생성 완료 (${#sessions[@]}개 세션)"
sleep 0.5
tmux attach -t "$monitor_session"
}
# 메인
if [[ $# -eq 0 ]]; then
show_help
fi
PATTERN="$1"
monitor_dashboard "$PATTERN"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment