📖将服务和抓取分开,最大程度节省内存

This commit is contained in:
柳神 2024-08-11 22:10:37 +08:00
parent 47c42c3bbc
commit c1e72eef31
4 changed files with 32 additions and 26 deletions

View File

@ -4,31 +4,42 @@
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# 定义日志文件路径
CRON_LOG_FILE="$SCRIPT_DIR/cron_grab.log"
API_LOG_FILE="$SCRIPT_DIR/api_grab.log"
# CRON_LOG_FILE="$SCRIPT_DIR/cron_grab.log"
# API_LOG_FILE="$SCRIPT_DIR/api_grab.log"
# 定义要执行的命令
COMMAND="python3 $SCRIPT_DIR/run.py"
# # 定义要执行的命令
# COMMAND="python3 $SCRIPT_DIR/run.py"
# 定义定时任务的执行间隔(例如每四小时一次)
INTERVAL="4"
# # 定义定时任务的执行间隔(例如每四小时一次)
# INTERVAL="4"
# 添加定时任务到 crontab
(crontab -l 2>/dev/null; echo "0 */$INTERVAL * * * $COMMAND >> $CRON_LOG_FILE 2>&1 && echo '运行成功'") | crontab -
# (crontab -l 2>/dev/null; echo "0 */$INTERVAL * * * $COMMAND >> $CRON_LOG_FILE 2>&1 && echo '运行成功'") | crontab -
# echo "===================================="
# echo "定时爬取 成功设置时间间隔4h"
# echo "定时任务日志:$CRON_LOG_FILE"
# echo "===================================="
#!/bin/bash
# 获取当前脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# 定义 API 服务的启动命令
API_COMMAND="python3 $SCRIPT_DIR/server.py"
echo "===================================="
echo "定时爬取 成功设置时间间隔4h"
echo "定时任务日志:$CRON_LOG_FILE"
echo "===================================="
# 后台运行服务端将数据映射到API
echo "****正在启动API服务****"
nohup python3 $SCRIPT_DIR/server.py > $API_LOG_FILE 2>&1 &
nohup $API_COMMAND &>/dev/null &
API_PID=$!
sleep 5 # 等待API服务启动可能需要调整等待时间
echo "API 服务已启动http://localhost:1223"
echo "API 服务日志:$API_LOG_FILE"
echo "API 服务进程号:$API_PID"
echo "API 服务关闭命令kill -9 $API_PID"
echo "文档地址https://blog.qyliu.top/posts/4dc716ec/"
@ -43,4 +54,9 @@ if [ "$USER_CHOICE" -eq 1 ]; then
echo "****爬取成功****"
else
echo "退出选项被选择,掰掰!"
echo "===================================="
echo "定时抓取的部分请自行设置,如果有宝塔等面板可以按照说明直接添加,如果没有宝塔可以查看本脚本上面屏蔽的部分,自行添加到 crontab 中"
echo "===================================="
fi

View File

@ -14,7 +14,8 @@
### 2024-08-11
* 添加服务器部署的情况下合并github结果的选项
* 正在测试自部署是否成功
* 由于复杂性,决定将服务和定时抓取分开,使用面板自带进行配置,防止小白无法配置
* 修改文档,添加自部署部分
### 2024-08-03

2
requirements-server.txt Normal file
View File

@ -0,0 +1,2 @@
fastapi
uvicorn

View File

@ -1,13 +1,8 @@
from fastapi import FastAPI
from fastapi.responses import HTMLResponse, JSONResponse
from starlette.middleware.cors import CORSMiddleware
import schedule
import time
import logging
import os
import json
import random
from threading import Lock, Thread
from friend_circle_lite.get_info import fetch_and_process_data, sort_articles_by_time
from friend_circle_lite.get_conf import load_config
@ -23,10 +18,6 @@ app.add_middleware(
allow_headers=["*"],
)
# 配置日志记录
log_file = "cron_grab"
logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
@app.get("/", response_class=HTMLResponse)
async def root():
try:
@ -74,10 +65,6 @@ async def get_random_article():
return JSONResponse(content={"error": "Failed to decode JSON"}, status_code=500)
if __name__ == '__main__':
# 清空日志文件
if os.path.exists(log_file):
with open(log_file, 'w'):
pass
# 启动FastAPI应用
import uvicorn
uvicorn.run(app, host='0.0.0.0', port=1223)