7.2 服务化部署方案

系统服务配置

将小车系统部署为Linux系统服务:

# /etc/systemd/system/car.service
[Unit]
Description=Tennis Ball Collecting Car Service
After=network.target

[Service]
User=pi
WorkingDirectory=/home/pi/tennis-car
ExecStart=/usr/bin/python3 main.py
Restart=on-failure
RestartSec=5
Environment="DISPLAY=:0"

[Install]
WantedBy=multi-user.target

日志管理系统

实现多级日志记录:

import logging
from logging.handlers import RotatingFileHandler

# 创建日志器
logger = logging.getLogger("tennis_car")
logger.setLevel(logging.DEBUG)

# 文件日志 - 自动轮转
file_handler = RotatingFileHandler(
    "/var/log/tennis_car.log", 
    maxBytes=10 * 1024 * 1024,  # 10MB
    backupCount=5
)
file_handler.setFormatter(logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
))

# 控制台日志
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

logger.addHandler(file_handler)
logger.addHandler(console_handler)

远程监控接口

通过HTTP接口提供系统状态:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/status')
def system_status():
    return jsonify({
        "state": state_machine.state,
        "battery": battery_monitor.voltage,
        "position": position_estimator.position,
        "balls_collected": ball_counter.count
    })

@app.route('/logs')
def system_logs():
    with open("/var/log/tennis_car.log", "r") as f:
        return f.read()