diff --git a/app.py b/app.py index bf94b89..e8250dd 100755 --- a/app.py +++ b/app.py @@ -31,9 +31,9 @@ async def start_vnc_server(index: int) -> str: index: VNC 显示编号 """ try: - # 调用外部 start_vnc.sh 脚本,传入 index 作为参数 + # 调用外部 start_vnc_server.sh 脚本,传入 index 作为参数 process = await asyncio.create_subprocess_exec( - "/home/dgs/vnc-server/start_vnc.sh", + "/home/dgs/vnc-server/start_vnc_server.sh", str(index), stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE @@ -47,22 +47,58 @@ async def start_vnc_server(index: int) -> str: return f"❌ 执行出错: {str(e)}" @mcp.tool() -async def stop_vnc_server(index: int, username: str = None) -> str: - """停止 VNC 服务器""" +async def start_vnc_server(spider_code: str) -> str: + """启动爬虫 - if username is None: - username = f"user{index}" - - result = subprocess.run( - f'sudo su - {username} -c "vncserver -kill :{index}"', - shell=True, - capture_output=True, - text=True - ) - - return f"VNC 服务器已停止: {result.stdout}" + Args: + spider_code: 爬虫代码 + """ + try: + # 调用外部 start_spider.sh 脚本,传入 spider_code 作为参数 + process = await asyncio.create_subprocess_exec( + "/home/dgs/vnc-server/bin/start_spider.sh", + spider_code, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE + ) + stdout, stderr = await process.communicate() + if process.returncode == 0: + return f"✅ 爬虫启动成功\n输出:\n{stdout.decode()}" + else: + return f"❌ 爬虫启动失败\n错误:\n{stderr.decode()}" + except Exception as e: + return f"❌ 执行出错: {str(e)}" +@mcp.tool() +async def close_vnc_server(index: int) -> str: + """关闭 VNC 服务 + Args: + index: VNC 显示编号 + """ + try: + # 调用外部 stop_vnc_server.sh 脚本,传入 index 作为参数 + process = await asyncio.create_subprocess_exec( + "/home/dgs/vnc-server/stop_vnc_server.sh", + str(index), + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE + ) + stdout, stderr = await process.communicate() + if process.returncode == 0: + return f"✅ VNC服务关闭成功\n输出:\n{stdout.decode()}" + else: + return f"❌ VNC服务关闭失败\n错误:\n{stderr.decode()}" + except Exception as e: + return f"❌ 执行出错: {str(e)}" + +# 单参数模板 +@mcp.resource("data://spider_code") +def get_spider_code_list() -> str: + return f'''[ + {"spider_code": "01","name": "阳光采购爬虫"}, + {"spider_code": "02","name": "QQ邮箱爬虫"}, + ]''' # 运行服务器 if __name__ == "__main__": mcp.run(transport="sse") diff --git a/bin/auto_install.sh b/bin/auto_install.sh index 7d9f8b8..7a5ed9f 100644 --- a/bin/auto_install.sh +++ b/bin/auto_install.sh @@ -5,17 +5,17 @@ GIT_DOMAIN=https://git.nps.crabapples.cn echo "清理旧脚本..." -rm -rf ./install.sh ./start_vnc.sh ./close_vnc.sh ./start_spider.sh ./update.sh ./uninstall.sh +rm -rf ./install.sh ./start_vnc_server.sh ./close_vnc_server.sh ./start_spider.sh ./update.sh ./uninstall.sh echo "开始下载..." echo "下载安装脚本..." wget -q --show-progress $GIT_DOMAIN/crabapples/learn-spider/raw/branch/main/bin/install.sh && chmod +x install.sh echo "下载启动VNC脚本..." -wget -q --show-progress $GIT_DOMAIN/crabapples/learn-spider/raw/branch/main/bin/start_vnc.sh && chmod +x start_vnc.sh +wget -q --show-progress $GIT_DOMAIN/crabapples/learn-spider/raw/branch/main/bin/start_vnc_server.sh && chmod +x start_vnc_server.sh echo "下载关闭VNC脚本..." -wget -q --show-progress $GIT_DOMAIN/crabapples/learn-spider/raw/branch/main/bin/close_vnc.sh && chmod +x close_vnc.sh +wget -q --show-progress $GIT_DOMAIN/crabapples/learn-spider/raw/branch/main/bin/close_vnc_server.sh && chmod +x close_vnc_server.sh echo "下载启动爬虫脚本..." wget -q --show-progress $GIT_DOMAIN/crabapples/learn-spider/raw/branch/main/bin/start_spider.sh && chmod +x start_spider.sh diff --git a/bin/close_vnc.sh b/bin/close_vnc_server.sh similarity index 100% rename from bin/close_vnc.sh rename to bin/close_vnc_server.sh diff --git a/bin/start_spider.sh b/bin/start_spider.sh index a7c254e..7b42f46 100644 --- a/bin/start_spider.sh +++ b/bin/start_spider.sh @@ -3,11 +3,20 @@ spider_code=$1 PUBLIC_DIR="${2:-/shared}" start_spider(){ - cd $PUBLIC_DIR/learn-spider - echo "$PUBLIC_DIR/learn-spider" echo "正在启动爬虫$spider_code" - sudo -E ./start_spider.sh $spider_code # -E 保留当前环境变量 + if [ "$spider_code" = "01" ]; then + spider_name="china_net.py" + elif [ "$spider_code" = "02" ]; then + spider_name="mail_qq.py" + else + echo "爬虫名称错误" + exit -1 + fi + echo "爬虫名称:$spider_name" + .venv/bin/python3.12 "spider/$spider_name" } echo "启动爬虫" +cd $PUBLIC_DIR/learn-spider +echo "$PUBLIC_DIR/learn-spider" start_spider \ No newline at end of file diff --git a/bin/start_vnc.sh b/bin/start_vnc_server.sh similarity index 100% rename from bin/start_vnc.sh rename to bin/start_vnc_server.sh