143 lines
4.2 KiB
Python
143 lines
4.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Flask 提示词大师 - 简化 Windows 服务
|
|
使用 Windows 任务计划程序实现开机自启动
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
import logging
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
# 添加项目路径到 Python 路径
|
|
project_root = Path(__file__).parent
|
|
sys.path.insert(0, str(project_root))
|
|
|
|
from src.flask_prompt_master import create_app
|
|
|
|
def setup_logging():
|
|
"""配置日志"""
|
|
log_dir = project_root / "logs"
|
|
log_dir.mkdir(exist_ok=True)
|
|
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
handlers=[
|
|
logging.FileHandler(log_dir / "simple_service.log", encoding='utf-8'),
|
|
logging.StreamHandler()
|
|
]
|
|
)
|
|
return logging.getLogger(__name__)
|
|
|
|
def create_startup_task():
|
|
"""创建开机启动任务"""
|
|
logger = setup_logging()
|
|
|
|
try:
|
|
# 获取当前脚本的完整路径
|
|
script_path = Path(__file__).resolve()
|
|
python_path = sys.executable
|
|
|
|
# 创建任务计划命令
|
|
task_name = "FlaskPromptMasterStartup"
|
|
task_command = f'schtasks /create /tn "{task_name}" /tr "{python_path} {script_path}" /sc onstart /ru "SYSTEM" /f'
|
|
|
|
logger.info("正在创建开机启动任务...")
|
|
result = subprocess.run(task_command, shell=True, capture_output=True, text=True)
|
|
|
|
if result.returncode == 0:
|
|
logger.info("开机启动任务创建成功!")
|
|
return True
|
|
else:
|
|
logger.error(f"创建任务失败: {result.stderr}")
|
|
return False
|
|
|
|
except Exception as e:
|
|
logger.error(f"创建开机启动任务异常: {e}")
|
|
return False
|
|
|
|
def remove_startup_task():
|
|
"""删除开机启动任务"""
|
|
logger = setup_logging()
|
|
|
|
try:
|
|
task_name = "FlaskPromptMasterStartup"
|
|
task_command = f'schtasks /delete /tn "{task_name}" /f'
|
|
|
|
logger.info("正在删除开机启动任务...")
|
|
result = subprocess.run(task_command, shell=True, capture_output=True, text=True)
|
|
|
|
if result.returncode == 0:
|
|
logger.info("开机启动任务删除成功!")
|
|
return True
|
|
else:
|
|
logger.error(f"删除任务失败: {result.stderr}")
|
|
return False
|
|
|
|
except Exception as e:
|
|
logger.error(f"删除开机启动任务异常: {e}")
|
|
return False
|
|
|
|
def start_service():
|
|
"""启动服务"""
|
|
logger = setup_logging()
|
|
|
|
try:
|
|
logger.info("正在启动 Flask 提示词大师服务...")
|
|
|
|
# 设置环境变量
|
|
os.environ['FLASK_ENV'] = 'production'
|
|
os.environ['PYTHONPATH'] = str(project_root)
|
|
|
|
# 创建应用实例
|
|
app = create_app()
|
|
|
|
# 启动服务器
|
|
logger.info("服务启动成功,监听端口 5000")
|
|
logger.info("访问地址: http://localhost:5000")
|
|
|
|
app.run(
|
|
host='0.0.0.0',
|
|
port=5000,
|
|
debug=False,
|
|
threaded=True,
|
|
use_reloader=False
|
|
)
|
|
|
|
except Exception as e:
|
|
logger.error(f"服务启动失败: {e}")
|
|
raise
|
|
|
|
def main():
|
|
"""主函数"""
|
|
if len(sys.argv) == 1:
|
|
# 直接启动服务
|
|
start_service()
|
|
elif sys.argv[1] == "install":
|
|
# 安装开机启动任务
|
|
if create_startup_task():
|
|
print("✅ 开机启动任务安装成功!")
|
|
else:
|
|
print("❌ 开机启动任务安装失败!")
|
|
elif sys.argv[1] == "remove":
|
|
# 删除开机启动任务
|
|
if remove_startup_task():
|
|
print("✅ 开机启动任务删除成功!")
|
|
else:
|
|
print("❌ 开机启动任务删除失败!")
|
|
elif sys.argv[1] == "start":
|
|
# 启动服务
|
|
start_service()
|
|
else:
|
|
print("用法:")
|
|
print(" python simple_windows_service.py # 启动服务")
|
|
print(" python simple_windows_service.py install # 安装开机启动")
|
|
print(" python simple_windows_service.py remove # 删除开机启动")
|
|
print(" python simple_windows_service.py start # 启动服务")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|