Files
aitsc/simple_windows_service.py

143 lines
4.2 KiB
Python
Raw Permalink Normal View History

#!/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()