设置系统服务将应用配置为 Windows 服务实现开机自启动。
This commit is contained in:
142
simple_windows_service.py
Normal file
142
simple_windows_service.py
Normal file
@@ -0,0 +1,142 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user