Files
sanguo_vnpy/scripts/deployment/nas_manager.sh
T
2026-04-11 21:18:55 +08:00

255 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
# ============================================
# NAS 管理工具
# 提供挂载、卸载、状态检查、日志查看等功能
# ============================================
NAS_IP="192.168.2.154"
NAS_USER="cfdaily"
NAS_PASS="Ccf7561523"
NAS_SHARE="stock"
MOUNT_POINT="/Users/chufeng/nas/stock"
LAUNCH_DAEMON_LABEL="com.user.nasmount"
LOG_DIR="/Users/chufeng/.openclaw/workspace-jiangwei/logs"
MOUNT_LOG="${LOG_DIR}/nas_mount.log"
ERROR_LOG="${LOG_DIR}/nas_mount_error.log"
# 颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
print_header() {
echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE} NAS 管理工具${NC}"
echo -e "${BLUE}============================================${NC}"
echo ""
}
check_mounted() {
if mount | grep -q "$MOUNT_POINT"; then
return 0
else
return 1
fi
}
check_network() {
ping -c 1 -W 2 "$NAS_IP" &> /dev/null
}
show_status() {
print_header
echo "【状态检查】"
echo ""
# 网络状态
echo -n "网络连接: "
if check_network; then
echo -e "${GREEN}✅ 正常 ($NAS_IP)${NC}"
else
echo -e "${RED}❌ 无法连接${NC}"
fi
# 挂载状态
echo -n "NAS 挂载: "
if check_mounted; then
echo -e "${GREEN}✅ 已挂载${NC}"
echo -e " 挂载点: $MOUNT_POINT"
echo ""
echo "【挂载点内容】"
ls -lh "$MOUNT_POINT" 2>/dev/null || echo "无法读取挂载点"
else
echo -e "${RED}❌ 未挂载${NC}"
fi
echo ""
echo "【Launch Daemon 状态】"
if launchctl list | grep -q "$LAUNCH_DAEMON_LABEL"; then
echo -e "${GREEN}✅ 正在运行${NC}"
else
echo -e "${YELLOW}⚠️ 未运行${NC}"
fi
echo ""
echo "【磁盘使用情况】"
if check_mounted; then
df -h "$MOUNT_POINT"
else
echo "NAS 未挂载,无法显示"
fi
}
mount_nas() {
print_header
echo "【挂载 NAS】"
echo ""
if check_mounted; then
echo -e "${YELLOW}NAS 已经挂载${NC}"
return 0
fi
if ! check_network; then
echo -e "${RED}错误: 无法连接到 NAS ($NAS_IP)${NC}"
return 1
fi
echo "正在挂载..."
mkdir -p "$MOUNT_POINT"
NAS_URL="smb://${NAS_USER}:${NAS_PASS}@${NAS_IP}/${NAS_SHARE}"
if /sbin/mount_smbfs "$NAS_URL" "$MOUNT_POINT"; then
echo -e "${GREEN}✅ NAS 挂载成功!${NC}"
echo "挂载点: $MOUNT_POINT"
# 创建标记文件
touch "${MOUNT_POINT}/.mounted"
# 创建目录结构
echo ""
echo "创建目录结构..."
create_dir_structure
return 0
else
echo -e "${RED}❌ NAS 挂载失败${NC}"
return 1
fi
}
umount_nas() {
print_header
echo "【卸载 NAS】"
echo ""
if ! check_mounted; then
echo -e "${YELLOW}NAS 未挂载${NC}"
return 0
fi
echo "正在卸载..."
if umount "$MOUNT_POINT"; then
echo -e "${GREEN}✅ NAS 卸载成功${NC}"
return 0
else
echo -e "${YELLOW}强制卸载..."
if umount -f "$MOUNT_POINT"; then
echo -e "${GREEN}✅ NAS 强制卸载成功${NC}"
return 0
else
echo -e "${RED}❌ NAS 卸载失败${NC}"
return 1
fi
fi
}
create_dir_structure() {
cd "$MOUNT_POINT" || return
mkdir -p "A股数据/日线数据" "A股数据/分钟线数据" "A股数据/财务数据"
mkdir -p "回测结果/策略回测" "回测结果/性能报告"
mkdir -p "代码库/策略代码" "代码库/工具脚本"
mkdir -p "临时文件/下载缓存" "临时文件/临时数据"
chown -R chufeng:staff "$MOUNT_POINT" 2>/dev/null || true
}
show_logs() {
print_header
echo "【日志查看】"
echo ""
if [ ! -f "$MOUNT_LOG" ]; then
echo -e "${YELLOW}日志文件不存在${NC}"
return
fi
echo "最近 50 条日志:"
echo "----------------------------------------"
tail -50 "$MOUNT_LOG"
}
follow_logs() {
print_header
echo "【实时日志】"
echo "按 Ctrl+C 退出"
echo "----------------------------------------"
if [ ! -f "$MOUNT_LOG" ]; then
touch "$MOUNT_LOG"
fi
tail -f "$MOUNT_LOG"
}
restart_daemon() {
print_header
echo "【重启 Launch Daemon】"
echo ""
echo "停止守护进程..."
sudo launchctl stop "$LAUNCH_DAEMON_LABEL" 2>/dev/null
sleep 2
echo "启动守护进程..."
sudo launchctl start "$LAUNCH_DAEMON_LABEL"
echo -e "${GREEN}✅ Launch Daemon 已重启${NC}"
}
show_help() {
print_header
echo "使用方法: $0 [命令]"
echo ""
echo "命令列表:"
echo " status - 显示 NAS 状态"
echo " mount - 手动挂载 NAS"
echo " umount - 卸载 NAS"
echo " restart - 重启 Launch Daemon"
echo " logs - 显示最近日志"
echo " follow - 实时跟踪日志"
echo " help - 显示帮助信息"
echo ""
echo "示例:"
echo " $0 status # 查看状态"
echo " $0 follow # 实时查看日志"
}
# 主逻辑
case "${1:-status}" in
status)
show_status
;;
mount)
mount_nas
;;
umount)
umount_nas
;;
restart)
restart_daemon
;;
logs)
show_logs
;;
follow)
follow_logs
;;
help)
show_help
;;
*)
echo -e "${RED}未知命令: $1${NC}"
echo ""
show_help
exit 1
;;
esac