feat(cron): Bithumb cron 비활성화·재활성화 지원

example 기본 주석 처리와 install_crontab --disable/--enable로
다운로드·거래·모니터 cron을 안전하게 끄고 켤 수 있게 한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dsyoon
2026-07-01 00:02:21 +09:00
parent 72de8d534e
commit 0d6c57db62
2 changed files with 74 additions and 13 deletions

View File

@@ -1,18 +1,23 @@
#!/usr/bin/env bash
# Bithumb cron 등록 — 기존 crontab에 BITHUMB 블록 병합/갱신
# Bithumb cron 등록 — 기존 crontab에 BITHUMB 블록 병합/갱신/비활성화
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
MARKER_BEGIN="# BITHUMB vol_breakout cron (begin)"
MARKER_END="# BITHUMB vol_breakout cron (end)"
MARKER_BEGIN_ALT="# BITHUMB (begin)"
MARKER_END_ALT="# BITHUMB (end)"
EXAMPLE="${ROOT}/scripts/crontab.bithumb.example"
BITHUMB_CRON_RE='bithumb/scripts/(00_run_download_cron|3_run_vol_breakout_cron|3_run_vol_monitor_cron|3_ensure_vol_monitor_serve|3_run_watch_cron)\.sh'
usage() {
cat <<EOF
Usage: $(basename "$0") [--apply|--show|--remove]
Usage: $(basename "$0") [--show|--apply|--disable|--enable|--remove]
--show 등록될 cron 블록만 출력 (기본)
--apply crontab에 BITHUMB 블록 병합 후 설치
--apply crontab에 BITHUMB 블록 병합 후 설치 (example 주석=비활성)
--disable crontab BITHUMB 블록 내 실행 줄을 # 주석 처리
--enable crontab BITHUMB 블록 내 cron 줄 주석 해제
--remove crontab에서 BITHUMB 블록 제거
환경 변수:
@@ -22,6 +27,7 @@ Usage: $(basename "$0") [--apply|--show|--remove]
data/common/download_cron.log
data/spot/operations/vol_breakout_cron.log
data/spot/operations/vol_monitor_cron.log
data/spot/operations/vol_monitor_serve.log
EOF
}
@@ -29,18 +35,45 @@ render_block() {
{
echo "$MARKER_BEGIN"
sed "s|/Users/dsyoon/workspace/bithumb|${ROOT}|g" "$EXAMPLE" \
| grep -v '^#' | grep -v '^[[:space:]]*$'
| grep -v '^[[:space:]]*$'
echo "$MARKER_END"
}
}
strip_block() {
awk -v b="$MARKER_BEGIN" -v e="$MARKER_END" '
$0 == b { skip=1; next }
$0 == e { skip=0; next }
awk -v re="${BITHUMB_CRON_RE}" '
$0 == "# BITHUMB vol_breakout cron (begin)" { skip=1; next }
$0 == "# BITHUMB vol_breakout cron (end)" { skip=0; next }
$0 == "# BITHUMB (begin)" { skip=1; next }
$0 == "# BITHUMB (end)" { skip=0; next }
skip { next }
/^# BITHUMB/ { next }
/bithumb\/scripts\/(00_run_download_cron|3_run_vol_breakout_cron|3_run_vol_monitor_cron|3_run_watch_cron)\.sh/ { next }
$0 ~ re { next }
{ print }
'
}
toggle_block() {
local mode="$1"
awk -v mode="$mode" -v re="${BITHUMB_CRON_RE}" '
$0 == "# BITHUMB vol_breakout cron (begin)" || $0 == "# BITHUMB (begin)" {
in_b=1
print
next
}
$0 == "# BITHUMB vol_breakout cron (end)" || $0 == "# BITHUMB (end)" {
in_b=0
print
next
}
in_b && mode == "disable" && $0 !~ /^#/ && $0 ~ re {
print "# " $0
next
}
in_b && mode == "enable" && $0 ~ /^# / && $0 ~ re {
sub(/^# /, "")
print
next
}
{ print }
'
}
@@ -68,6 +101,28 @@ case "$ACTION" in
rm -f "$tmp"
echo "crontab installed. 확인: crontab -l"
;;
--disable)
tmp="$(mktemp)"
if crontab -l 2>/dev/null | toggle_block disable > "$tmp"; then
crontab "$tmp"
echo "BITHUMB cron 비활성화(주석 처리) 완료."
else
echo "crontab empty or not found." >&2
exit 1
fi
rm -f "$tmp"
;;
--enable)
tmp="$(mktemp)"
if crontab -l 2>/dev/null | toggle_block enable > "$tmp"; then
crontab "$tmp"
echo "BITHUMB cron 활성화(주석 해제) 완료."
else
echo "crontab empty or not found." >&2
exit 1
fi
rm -f "$tmp"
;;
--remove)
tmp="$(mktemp)"
if crontab -l 2>/dev/null | strip_block > "$tmp"; then