gitea, notion webhook
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

92 lines
2.2 KiB

#!/usr/bin/env bash
#
# slack-notifier 백그라운드 실행 스크립트 (systemd 없이 간단 운영용).
#
# ./deploy/run.sh start [dev|prod] # 백그라운드 시작 (기본 prod)
# ./deploy/run.sh stop # 종료
# ./deploy/run.sh restart [dev|prod] # 재시작
# ./deploy/run.sh status # 상태 확인
# ./deploy/run.sh logs # 구조적 로그(app.log) 실시간
#
# 바이너리(slack-notifier)와 .env.{env} 는 프로젝트 루트에 있어야 한다.
set -euo pipefail
# 스크립트 위치(deploy/) 기준으로 프로젝트 루트 결정
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$APP_DIR"
BIN="./slack-notifier"
ENV="${2:-prod}" # 기본 prod (dev 도 가능)
PID_FILE="$APP_DIR/run/slack-notifier.pid"
CONSOLE_LOG="$APP_DIR/logs/console.log" # stdout/stderr (앱 시작 전 출력·패닉 포함)
mkdir -p "$APP_DIR/run" "$APP_DIR/logs"
is_running() {
[[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null
}
start() {
if is_running; then
echo "이미 실행 중 (pid $(cat "$PID_FILE"))"
exit 0
fi
if [[ ! -x "$BIN" ]]; then
echo "바이너리가 없거나 실행 권한이 없음: $BIN"
echo " → make build-linux 후 이 디렉터리에 두고 chmod +x 하세요"
exit 1
fi
nohup "$BIN" -env "$ENV" >>"$CONSOLE_LOG" 2>&1 &
echo $! >"$PID_FILE"
sleep 1
if is_running; then
echo "시작됨 (pid $(cat "$PID_FILE"), env=$ENV)"
else
echo "시작 실패 — 마지막 로그:"
tail -n 20 "$CONSOLE_LOG"
rm -f "$PID_FILE"
exit 1
fi
}
stop() {
if ! is_running; then
echo "실행 중이 아님"
rm -f "$PID_FILE"
return 0
fi
local pid
pid="$(cat "$PID_FILE")"
kill "$pid" 2>/dev/null || true
for _ in $(seq 1 10); do
is_running || break
sleep 0.5
done
if is_running; then
echo "강제 종료(kill -9)"
kill -9 "$pid" 2>/dev/null || true
fi
rm -f "$PID_FILE"
echo "종료됨"
}
case "${1:-}" in
start) start ;;
stop) stop ;;
restart)
stop
start
;;
status)
if is_running; then
echo "running (pid $(cat "$PID_FILE"))"
else
echo "stopped"
fi
;;
logs) tail -f "$APP_DIR/logs/app.log" ;;
*)
echo "사용법: $0 {start|stop|restart|status|logs} [dev|prod]"
exit 1
;;
esac