initial-import: 2026-04-11 21:18:55
This commit is contained in:
Executable
+254
@@ -0,0 +1,254 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user