66 lines
2.0 KiB
Bash
Executable File
66 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# --- 配置变量 ---
|
|
WORK_DIR="/home/fmq/program/SpectraRust"
|
|
CMD_PATH="/home/fmq/.claude/local/claude"
|
|
CMD_ARGS="--permission-mode bypassPermissions --print '/codegraph-guide 继续执行重构任务。禁止询问,禁止总结报告,禁止跳过复杂模块。'"
|
|
|
|
# 日志文件路径:修改为工作目录内部
|
|
LOG_FILE="${WORK_DIR}/logs/claude_$(date +%Y%m%d_%H%M%S).log"
|
|
|
|
# --- 1. 环境检查 ---
|
|
# 检查工作目录是否存在
|
|
if [ ! -d "$WORK_DIR" ]; then
|
|
echo "❌ 错误: 工作目录不存在: $WORK_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
# 检查命令文件是否存在且可执行
|
|
if [ ! -x "$CMD_PATH" ]; then
|
|
echo "❌ 错误: 命令不存在或不可执行: $CMD_PATH"
|
|
exit 1
|
|
fi
|
|
|
|
# --- 新增:检查是否已有 claude 进程在运行 ---
|
|
echo "正在检查是否有 claude 进程在运行..."
|
|
# 使用 ps aux 列出所有进程,然后 grep 查找 'claude',再用 grep -v grep 排除掉 grep 命令本身
|
|
if ps aux | grep '[c]laude' > /dev/null; then
|
|
echo "⚠️ 检测到 claude 进程已在运行,退出脚本。"
|
|
# 可选:显示正在运行的进程信息
|
|
ps aux | grep '[c]laude'
|
|
exit 1
|
|
fi
|
|
|
|
# --- 2. 启动进程 ---
|
|
# 切换到工作目录
|
|
cd "$WORK_DIR" || exit 1
|
|
|
|
# 执行命令
|
|
# nohup 保证退出终端后进程不挂
|
|
# < /dev/null 防止进程读取终端输入导致挂起
|
|
# > "$LOG_FILE" 2>&1 将标准输出和错误输出都重定向到日志文件
|
|
nohup "$CMD_PATH" $CMD_ARGS < /dev/null > "$LOG_FILE" 2>&1 &
|
|
CURRENT_PID=$!
|
|
|
|
# --- 3. 验证启动结果 ---
|
|
# 短暂休眠,给进程一点初始化时间,以便捕获即时崩溃(如缺少动态库)
|
|
sleep 0.5
|
|
|
|
# 检查进程是否仍然存活
|
|
if kill -0 "$CURRENT_PID" 2>/dev/null; then
|
|
echo "启动成功!"
|
|
echo "PID: $CURRENT_PID"
|
|
echo "日志路径: $LOG_FILE"
|
|
exit 0
|
|
else
|
|
echo "❌ 启动失败! 进程已意外退出。"
|
|
echo "--- 错误日志预览 ---"
|
|
# 如果日志文件存在,打印其内容
|
|
if [ -f "$LOG_FILE" ]; then
|
|
cat "$LOG_FILE"
|
|
else
|
|
echo "(无日志文件生成)"
|
|
fi
|
|
exit 1
|
|
fi
|