#!/usr/bin/env bash # 安装/更新 systemd 定时任务(需要 sudo;幂等,可反复执行) # # bash scripts/install_systemd.sh # # 做四件事: # 1) 把 systemd/*.{service,timer} 装到 /etc/systemd/system/ # 2) 启用并启动 xwlb-daily.timer(每天 21:00 触发) # 3) 启用 xwlb-tunnel.service(autossh 隧道,随开机自启) # 4) 打印下一次触发时间 set -euo pipefail DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" SUDO="" if [ "$(id -u)" -ne 0 ]; then SUDO="sudo"; fi echo "== 1/4 安装单元文件 ==" for unit in xwlb-daily.service xwlb-daily.timer xwlb-tunnel.service; do $SUDO install -m 0644 "$DIR/systemd/$unit" "/etc/systemd/system/$unit" echo " $unit" done echo "== 2/4 daemon-reload ==" $SUDO systemctl daemon-reload echo "== 3/4 启用定时器 ==" $SUDO systemctl enable --now xwlb-daily.timer >/dev/null echo " xwlb-daily.timer 已启用" echo "== 4/4 隧道服务 ==" if ss -ltn 2>/dev/null | grep -q '127.0.0.1:13306'; then if systemctl is-active --quiet xwlb-tunnel.service; then $SUDO systemctl restart xwlb-tunnel.service echo " xwlb-tunnel.service 已重启" else echo " ⚠️ 13306 已被**非 systemd 托管**的 autossh 占用,暂不启用隧道服务。" echo " 想改由 systemd 托管(可开机自启、断了自动重连)请执行:" echo " pkill -f 'autossh.*13306' && sudo systemctl enable --now xwlb-tunnel.service" fi else $SUDO systemctl enable --now xwlb-tunnel.service >/dev/null echo " xwlb-tunnel.service 已启用" fi echo echo "== 下一次触发时间 ==" systemctl list-timers xwlb-daily.timer --no-pager || true echo echo "查看日志: journalctl -u xwlb-daily -f (也可看 $DIR/main.log)" echo "立即试跑: sudo systemctl start xwlb-daily.service" echo "临时停用: sudo systemctl disable --now xwlb-daily.timer"