82 lines
2.6 KiB
Bash
82 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
||
# Nexus — 安装/更新 host crontab:health_monitor + db_backup
|
||
#
|
||
# sudo bash deploy/install_ops_cron.sh
|
||
# NEXUS_ROOT=/opt/nexus sudo bash deploy/install_ops_cron.sh
|
||
set -euo pipefail
|
||
|
||
NEXUS_ROOT="${NEXUS_ROOT:-/opt/nexus}"
|
||
DEPLOY_DIR="${NEXUS_ROOT}/deploy"
|
||
HEALTH_MARKER="nexus-health-monitor"
|
||
BACKUP_MARKER="nexus-mysql-backup"
|
||
HEALTH_LOG="${NEXUS_HEALTH_LOG:-/var/log/nexus_health.log}"
|
||
BACKUP_LOG="${NEXUS_BACKUP_LOG:-/var/log/nexus_backup.log}"
|
||
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m'
|
||
|
||
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||
error() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
|
||
|
||
if [[ "$(id -u)" -ne 0 ]]; then
|
||
error "请使用 root 运行: sudo bash $0"
|
||
exit 1
|
||
fi
|
||
|
||
ensure_crontab() {
|
||
if command -v crontab >/dev/null 2>&1; then
|
||
return 0
|
||
fi
|
||
warn "未检测到 crontab,尝试安装 cron 包…"
|
||
if command -v apt-get >/dev/null 2>&1; then
|
||
export DEBIAN_FRONTEND=noninteractive
|
||
apt-get update -qq
|
||
apt-get install -y -qq cron
|
||
systemctl enable --now cron 2>/dev/null || systemctl enable --now crond 2>/dev/null || true
|
||
elif command -v yum >/dev/null 2>&1; then
|
||
yum install -y cronie
|
||
systemctl enable --now crond 2>/dev/null || true
|
||
fi
|
||
if ! command -v crontab >/dev/null 2>&1; then
|
||
error "无法安装 crontab(请手动: apt install cron)"
|
||
exit 1
|
||
fi
|
||
info "cron 已安装"
|
||
}
|
||
|
||
ensure_crontab
|
||
|
||
for f in \
|
||
"${DEPLOY_DIR}/health_monitor.sh" \
|
||
"${DEPLOY_DIR}/db_backup.sh" \
|
||
"${DEPLOY_DIR}/mysql_dump_to_file.sh" \
|
||
; do
|
||
if [[ ! -f "$f" ]]; then
|
||
error "缺少脚本: $f"
|
||
exit 1
|
||
fi
|
||
chmod +x "$f" 2>/dev/null || true
|
||
done
|
||
|
||
touch "$HEALTH_LOG" "$BACKUP_LOG" 2>/dev/null || true
|
||
chmod 644 "$HEALTH_LOG" "$BACKUP_LOG" 2>/dev/null || true
|
||
|
||
HEALTH_LINE="* * * * * NEXUS_DEPLOY_DIR=${NEXUS_ROOT} bash ${DEPLOY_DIR}/health_monitor.sh >> ${HEALTH_LOG} 2>&1 # ${HEALTH_MARKER}"
|
||
BACKUP_LINE="0 3 * * * NEXUS_ROOT=${NEXUS_ROOT} bash ${DEPLOY_DIR}/db_backup.sh >> ${BACKUP_LOG} 2>&1 # ${BACKUP_MARKER}"
|
||
|
||
existing="$(crontab -l 2>/dev/null || true)"
|
||
filtered="$(printf '%s\n' "$existing" | grep -v "$HEALTH_MARKER" | grep -v "$BACKUP_MARKER" | grep -v 'deploy/health_monitor.sh' | grep -v 'deploy/db_backup.sh' || true)"
|
||
{
|
||
printf '%s\n' "$filtered" | sed '/^[[:space:]]*$/d'
|
||
echo "$HEALTH_LINE"
|
||
echo "$BACKUP_LINE"
|
||
} | crontab -
|
||
|
||
info "已写入 crontab:"
|
||
crontab -l | grep -E "$HEALTH_MARKER|$BACKUP_MARKER" || true
|
||
info "健康巡检日志: $HEALTH_LOG"
|
||
info "MySQL 备份日志: $BACKUP_LOG"
|